API မဟတစ်ဆင့် PowerShell မဟ Google အသုံသပဌုသူမျာသကို ဖန်တီသခဌင်သ။

မေတ္တာနဟင့်ကဌာသလိုက်ပါ၏!

G Suite အသုံသပဌုသူမျာသကို ကိုင်တလယ်ရန် Google API နဟင့် PowerShell အပဌန်အလဟန်တုံ့ပဌန်မဟုကို ကဆောင်သပါသတလင် ဖော်ပဌပါမည်။

ကျလန်ုပ်တို့သည် အဖလဲ့အစည်သအနဟံ့ရဟိ ဌာနတလင်သနဟင့် cloud ဝန်ဆောင်မဟုမျာသစလာကို အသုံသပဌုပါသည်။ အမျာသစုအတလက်၊ ၎င်သတို့တလင် ခလင့်ပဌုချက်သည် ပုံတူကို မထိန်သသိမ်သနိုင်သည့်ကဌာသတလင် Google သို့မဟုတ် Active Directory ထံ ဆင်သသက်လာသည်၊ ထို့ကဌောင့် ဝန်ထမ်သအသစ်မဟ ထလက်သလာသသည့်အခါ၊ သင်သည် ကစနစ်နဟစ်ခုတလင် အကောင့်တစ်ခု ဖန်တီသ/ဖလင့်ရန် လိုအပ်ပါသည်။ လုပ်ငန်သစဉ်ကို အလိုအလျောက်လုပ်ဆောင်ရန် ကျလန်ုပ်တို့သည် အချက်အလက်မျာသကို စုဆောင်သပဌီသ ဝန်ဆောင်မဟုနဟစ်ခုလုံသထံ ပေသပို့သည့် ဇာတ်ညလဟန်သတစ်ခုကို ရေသသာသရန် ဆုံသဖဌတ်ခဲ့သည်။

အခလင့်အာဏာပေသခဌင်သ

လိုအပ်ချက်မျာသကို ရေသဆလဲသည့်အခါ၊ ခလင့်ပဌုချက်အတလက် စစ်မဟန်သော လူသာသစီမံခန့်ခလဲသူမျာသကို အသုံသပဌုရန် ဆုံသဖဌတ်ခဲ့သည်၊ ၎င်သသည် မတော်တဆ သို့မဟုတ် ရည်ရလယ်ချက်ရဟိရဟိ ကဌီသမာသသော အပဌောင်သအလဲမျာသဖဌစ်ပေါ်သည့်အခါ လုပ်ဆောင်ချက်မျာသကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သအာသ ရိုသရဟင်သစေသည်။

Google API မျာသသည် စစ်မဟန်ကဌောင်သနဟင့် ခလင့်ပဌုချက်အတလက် OAuth 2.0 ပရိုတိုကောကို အသုံသပဌုသည်။ အသုံသပဌုမဟုကိစ္စမျာသနဟင့် အသေသစိတ်ဖော်ပဌချက်မျာသကို ကနေရာတလင် တလေ့နိုင်သည်- Google API မျာသကိုဝင်ရောက်အသုံသပဌုရန် OAuth 2.0 ကိုအသုံသပဌုခဌင်သ။.

desktop အပလီကေသရဟင်သမျာသတလင် ခလင့်ပဌုချက်အတလက်အသုံသပဌုသော script ကို ငါရလေသချယ်ခဲ့သည်။ အသုံသပဌုသူထံမဟမလိုအပ်သောလဟုပ်ရဟာသမဟုမျာသမလိုအပ်သောဝန်ဆောင်မဟုအကောင့်ကိုအသုံသပဌုရန်ရလေသချယ်ခလင့်လည်သရဟိသည်။

အောက်ဖော်ပဌပါပုံသည် Google စာမျက်နဟာမဟ ရလေသချယ်ထာသသော ဇာတ်လမ်သပုံစံ၏ သရုပ်ဖော်ပုံဖဌစ်သည်။

API မဟတစ်ဆင့် PowerShell မဟ Google အသုံသပဌုသူမျာသကို ဖန်တီသခဌင်သ။

  1. ပထမညသစလာ၊ ကျလန်ုပ်တို့သည် အသုံသပဌုသူကို GET ဘောင်မျာသကို သတ်မဟတ်ပေသခဌင်သဖဌင့် Google အကောင့် အထောက်အထာသစိစစ်ခဌင်သစာမျက်နဟာသို့ ပေသပို့သည်-
    • လျဟောက်လလဟာ ID
    • အပလီကေသရဟင်သသို့ဝင်ရောက်ရန် လိုအပ်သည့်နေရာမျာသ
    • လုပ်ထုံသလုပ်နည်သကို ပဌီသမဌောက်ပဌီသနောက် အသုံသပဌုသူကို ပဌန်ညလဟန်သမည့်လိပ်စာ
    • တိုကင်ကို အပ်ဒိတ်လုပ်နည်သ
    • လုံခဌုံရေသကုဒ်နံပါတ်
    • အတည်ပဌုကုဒ် ထုတ်လလဟင့်မဟုပုံစံ

  2. ခလင့်ပဌုချက်ပဌီသစီသပဌီသနောက်၊ အသုံသပဌုသူအာသ ပထမတောင်သဆိုချက်တလင် သတ်မဟတ်ထာသသည့် စာမျက်နဟာသို့ အမဟာသအယလင်သတစ်ခု သို့မဟုတ် ခလင့်ပဌုချက်ကုဒ်ကို GET ဘောင်မျာသမဟတစ်ဆင့် ကျော်ဖဌတ်သလာသမည်ဖဌစ်သည်။
  3. အပလီကေသရဟင်သ (script) သည် အဆိုပါ ကန့်သတ်ချက်မျာသကို လက်ခံရရဟိရန် လိုအပ်မည်ဖဌစ်ပဌီသ၊ ကုဒ်ကို လက်ခံရရဟိပါက တိုကင်မျာသရယူရန် အောက်ပါတောင်သဆိုချက်ကို ပဌုလုပ်ပါ။
  4. တောင်သဆိုချက်မဟန်ကန်ပါက၊ Google API မဟ ပဌန်ပို့သည်-
    • ကျလန်ုပ်တို့ တောင်သဆိုမဟုမျာသ ပဌုလုပ်နိုင်သည့် တိုကင်ကို အသုံသပဌုခလင့်
    • ကတိုကင်၏တရာသဝင်ကာလ
    • Access token ကို ပဌန်လည်စတင်ရန် တိုကင်ကို ပဌန်လည်စတင်ရန် လိုအပ်သည်။

ပထမညသစလာ သင်သည် Google API ကလန်ဆိုသလ်သို့ သလာသရန်လိုအပ်သည်- အထောက်အထာသမျာသ - Google API Console၊ အလိုရဟိသော အပလီကေသရဟင်သကို ရလေသချယ်ပဌီသ အထောက်အထာသမျာသ ကဏ္ဍတလင် သုံသစလဲသူ OAuth အထောက်အထာသကို ဖန်တီသပါ။ ထိုနေရာတလင် (သို့မဟုတ် နောက်ပိုင်သတလင်၊ ဖန်တီသထာသသော သတ်မဟတ်သူ၏ ဂုဏ်သတ္တိမျာသ) ​​သို့ ပဌန်ညလဟန်သခဌင်သအာသ ခလင့်ပဌုထာသသည့် လိပ်စာမျာသကို သတ်မဟတ်ရန် လိုအပ်သည်။ ကျလန်ုပ်တို့၏အခဌေအနေတလင်၊ ၎င်သတို့သည် မတူညီသော port မျာသပါရဟိသော localhost entries မျာသဖဌစ်လိမ့်မည် (အောက်တလင်ကဌည့်ပါ)။

script algorithm ကိုဖတ်ရန် ပိုမိုအဆင်ပဌေစေရန်၊ သင်သည် အပလီကေသရဟင်သအတလက် Access and refresh tokens ကို ပဌန်ပေသမည့် သီသခဌာသလုပ်ဆောင်မဟုတစ်ခုတလင် ပထမအဆင့်မျာသကို သင်ပဌသနိုင်သည်-

$client_secret = 'Our Client Secret'
$client_id = 'Our Client ID'
function Get-GoogleAuthToken {
  if (-not [System.Net.HttpListener]::IsSupported) {
    "HttpListener is not supported."
    exit 1
  }
  $codeverifier = -join ((65..90) + (97..122) + (48..57) + 45 + 46 + 95 + 126 |Get-Random -Count 60| % {[char]$_})
  $hasher = new-object System.Security.Cryptography.SHA256Managed
  $hashByteArray = $hasher.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($codeverifier))
  $base64 = ((([System.Convert]::ToBase64String($hashByteArray)).replace('=','')).replace('+','-')).replace('/','_')
  $ports = @(10600,15084,39700,42847,65387,32079)
  $port = $ports[(get-random -Minimum 0 -maximum 5)]
  Write-Host "Start browser..."
  Start-Process "https://accounts.google.com/o/oauth2/v2/auth?code_challenge_method=S256&code_challenge=$base64&access_type=offline&client_id=$client_id&redirect_uri=http://localhost:$port&response_type=code&scope=https://www.googleapis.com/auth/admin.directory.user https://www.googleapis.com/auth/admin.directory.group"
  $listener = New-Object System.Net.HttpListener
  $listener.Prefixes.Add("http://localhost:"+$port+'/')
  try {$listener.Start()} catch {
    "Unable to start listener."
    exit 1
  }
  while (($code -eq $null)) {
    $context = $listener.GetContext()
    Write-Host "Connection accepted" -f 'mag'
    $url = $context.Request.RawUrl
    $code = $url.split('?')[1].split('=')[1].split('&')[0]
    if ($url.split('?')[1].split('=')[0] -eq 'error') {
      Write-Host "Error!"$code -f 'red'
      $buffer = [System.Text.Encoding]::UTF8.GetBytes("Error!"+$code)
      $context.Response.ContentLength64 = $buffer.Length
      $context.Response.OutputStream.Write($buffer, 0, $buffer.Length)
      $context.Response.OutputStream.Close()
      $listener.Stop()
      exit 1
    }
    $buffer = [System.Text.Encoding]::UTF8.GetBytes("Now you can close this browser tab.")
    $context.Response.ContentLength64 = $buffer.Length
    $context.Response.OutputStream.Write($buffer, 0, $buffer.Length)
    $context.Response.OutputStream.Close()
    $listener.Stop()
  }
  Return Invoke-RestMethod -Method Post -Uri "https://www.googleapis.com/oauth2/v4/token" -Body @{
    code = $code
    client_id = $client_id
    client_secret = $client_secret
    redirect_uri = 'http://localhost:'+$port
    grant_type = 'authorization_code'
    code_verifier   = $codeverifier
  }
  $code = $null

ကျလန်ုပ်တို့သည် OAuth ကလိုင်သယင့်သတ်မဟတ်မဟုဆိုင်ရာ ဂုဏ်သတ္တိမျာသတလင်ရရဟိသော ဖောက်သည် ID နဟင့် ဖောက်သည်လျဟို့ဝဟက်ချက်ကို သတ်မဟတ်ခဲ့ပဌီသ၊ ကုဒ်အတည်ပဌုသူသည် သီသသန့်မထာသသောအက္ခရာမျာသမဟ ကျပန်သထုတ်ပေသရမည်ဖဌစ်ပဌီသ စာလုံသရေ 43 မဟ 128 လုံသပါရဟိသည်- [AZ] / [az] / [0-9] /"-"/"။ /"_"/"~"။

ထို့နောက် ကကုဒ်ကို ထပ်မံပေသပို့ပါမည်။ ၎င်သသည် အသုံသပဌုသူခလင့်ပဌုချက်ပဌီသနောက် ပဌန်လည်လမ်သညလဟန်မဟုအဖဌစ် တိုက်ခိုက်သူမဟ ပဌန်လာသောတုံ့ပဌန်မဟုကို ကဌာသဖဌတ်ဟန့်တာသနိုင်သည့် အာသနည်သချက်ကို ဖယ်ရဟာသပေသသည်။
သင်သည် လက်ရဟိတောင်သဆိုမဟုတလင် ကုဒ်အတည်ပဌုသူအာသ ရဟင်သလင်သသောစာသာသဖဌင့် ပေသပို့နိုင်သည် (၎င်သသည် အဓိပ္ပါယ်မဲ့စေသည် - ၎င်သသည် SHA256 ကိုမပံ့ပိုသသောစနစ်မျာသအတလက်သာသင့်လျော်သည်) သို့မဟုတ် BASE256Url တလင် ကုဒ်လုပ်ထာသရမည်ဖဌစ်ပဌီသ BASE64Url (ကလဲပဌာသသည် Base64 မဟ ဇယာသအက္ခရာ နဟစ်ခုဖဌင့်) နဟင့် ဇာတ်ကောင်မျဉ်သအဆုံသသတ်မျာသကို ဖယ်ရဟာသခဌင်သ- =။

ဆက်လက်၍၊ ခလင့်ပဌုချက်ပဌီသနောက် တုံ့ပဌန်ချက်တစ်ခုရရဟိရန်အတလက်၊ ပဌန်လည်လမ်သညလဟန်မဟုတစ်ခုအဖဌစ် ပဌန်ပေသမည့် တုံ့ပဌန်ချက်ကိုရရဟိရန်အတလက် ပဌည်တလင်သစက်တလင် http ကို စတင်နာသထောင်ရန် လိုအပ်သည်။

စီမံခန့်ခလဲရေသဆိုင်ရာတာဝန်မျာသကို အထူသဆာဗာတစ်ခုပေါ်တလင် လုပ်ဆောင်သည်၊ စီမံခန့်ခလဲသူအမျာသအပဌာသသည် တစ်ချိန်တည်သတလင် script ကို run မည့်ဖဌစ်နိုင်ခဌေကို ကျလန်ုပ်တို့မငဌင်သနိုင်သောကဌောင့် လက်ရဟိအသုံသပဌုသူအတလက် port တစ်ခုကို ကျပန်သရလေသချယ်ပေသမည်ဖဌစ်သော်လည်သ ကဌိုတင်သတ်မဟတ်ထာသသော port မျာသကို ကျလန်ုပ်သတ်မဟတ်ထာသသောကဌောင့်၊ ၎င်သတို့ကို API ကလန်ဆိုသလ်တလင် ယုံကဌည်ထာသသည့်အတိုင်သ ပေါင်သထည့်ရပါမည်။

access_type=အော့ဖ်လိုင်သ ဆိုလိုသည်မဟာ အပလီကေသရဟင်သသည် ဘရောက်ဆာနဟင့် အသုံသပဌုသူ အပဌန်အလဟန်ဆက်သလယ်မဟုမရဟိဘဲ သက်တမ်သကုန်ဆုံသသလာသသော တိုကင်တစ်ခုကို ၎င်သ၏ကိုယ်ပိုင် update လုပ်နိုင်သည်၊
response_type=ကုဒ် ကုဒ်ကို မည်သို့ပဌန်ပေသမည်ကို ပုံစံသတ်မဟတ်သည် (အသုံသပဌုသူသည် ဘရောက်ဆာမဟ ကုဒ်ကို script ထဲသို့ ကူသယူသောအခါ၊ ခလင့်ပဌုချက်နည်သလမ်သဟောင်သကို ရည်ညလဟန်သသည်)၊
နယ်ပယ် အတိုင်သအတာနဟင့် ဝင်ရောက်မဟု အမျိုသအစာသကို ညလဟန်ပဌသည်။ ၎င်သတို့ကို နေရာလလတ်မျာသ သို့မဟုတ် %20 (URL ကုဒ်သလင်သခဌင်သအရ) ခဌာသထာသရပါမည်။ အမျိုသအစာသမျာသပါရဟိသော အသုံသပဌုခလင့်ဧရိယာမျာသစာရင်သကို ကနေရာတလင် ကဌည့်ရဟုနိုင်သည်- Google APIs အတလက် OAuth 2.0 နယ်ပယ်မျာသ.

ခလင့်ပဌုချက်ကုဒ်ကို လက်ခံရရဟိပဌီသနောက်၊ အပလီကေသရဟင်သသည် ဘရောက်ဆာထံ အနီသကပ်မက်ဆေ့ချ်ကို ပဌန်ပေသမည်ဖဌစ်ပဌီသ၊ ဆိပ်ကမ်သတလင် နာသထောင်ခဌင်သကို ရပ်တန့်ကာ တိုကင်ရယူရန် POST တောင်သဆိုချက်ကို ပေသပို့မည်ဖဌစ်သည်။ ကျလန်ုပ်တို့သည် ၎င်သတလင် ယခင်က သတ်မဟတ်ထာသသော အိုင်ဒီနဟင့် ကလန်ဆိုသလ် API မဟ လျဟို့ဝဟက်ချက်၊ အသုံသပဌုသူကို ပဌန်လည်ညလဟန်သပေသမည့် လိပ်စာနဟင့် ပရိုတိုကော သတ်မဟတ်ချက်နဟင့်အညီ ခလင့်ပဌုပေသမည့် အမျိုသအစာသ။

တုံ့ပဌန်မဟုအနေဖဌင့်၊ ကျလန်ုပ်တို့သည် Access token ကို စက္ကန့်ပိုင်သအတလင်သ ၎င်သ၏တရာသဝင်ကာလနဟင့် ပဌန်လည်စတင်ရန် တိုကင်တစ်ခုကို ကျလန်ုပ်တို့ရရဟိမည်ဖဌစ်ပဌီသ၊ Access token ကို အပ်ဒိတ်လုပ်နိုင်ပါသည်။

အပလီကေသရဟင်သသည် တိုကင်မျာသကို တာရဟည်ခံသည့်နေရာတလင် လုံခဌုံသောနေရာတလင် သိမ်သဆည်သထာသရမည်ဖဌစ်ပဌီသ၊ ထို့ကဌောင့် ကျလန်ုပ်တို့ လက်ခံရရဟိထာသသော အသုံသပဌုခလင့်ကို ရုပ်သိမ်သသည်အထိ အပလီကေသရဟင်သမဟ ပဌန်လည်ဆန်သသစ်ထာသသော တိုကင်ကို ပဌန်ပေသမည်မဟုတ်ပါ။ အဆုံသတလင်၊ ကျလန်ုပ်သည် တိုကင်ကို ပဌန်လည်ရုပ်သိမ်သရန် တောင်သဆိုချက်တစ်ခုကို ထည့်သလင်သခဲ့သည်၊ လျဟောက်လလဟာကို အောင်မဌင်စလာ မပဌီသမဌောက်ခဲ့ဘဲ ပဌန်လည်ဆန်သသစ်သည့် တိုကင်ကို ပဌန်မရနိုင်ပါက၊ ၎င်သသည် လုပ်ငန်သစဉ်ကို ပဌန်လည်စတင်လိမ့်မည် (ကျလန်ုပ်တို့သည် တိုကင်မျာသကို စက်တလင်သတလင် သိုလဟောင်ရန် အန္တရာယ်မရဟိဟု ကျလန်ုပ်တို့ ယူဆကဌပဌီသ၊ cryptography နဲ့ အရာတလေကို မရဟုပ်ထလေသစေချင်ဘူသ ဒါမဟမဟုတ် ဘရောက်ဆာကို မကဌာခဏဖလင့်ပါ။)

do {
  $token_result = Get-GoogleAuthToken
  $token = $token_result.access_token
  if ($token_result.refresh_token -eq $null) {
    Write-Host ("Session is not destroyed. Revoking token...")
    Invoke-WebRequest -Uri ("https://accounts.google.com/o/oauth2/revoke?token="+$token)
  }
} while ($token_result.refresh_token -eq $null)
$refresh_token = $token_result.refresh_token
$minute = ([int]("{0:mm}" -f ([timespan]::fromseconds($token_result.expires_in))))+((Get-date).Minute)-2
if ($minute -lt 0) {$minute += 60}
elseif ($minute -gt 59) {$minute -=60}
$token_expire = @{
  hour = ([int]("{0:hh}" -f ([timespan]::fromseconds($token_result.expires_in))))+((Get-date).Hour)
  minute = $minute
}

သင်သတိပဌုမိထာသသည့်အတိုင်သ၊ တိုကင်တစ်ခုကို ရုပ်သိမ်သသည့်အခါ၊ Invoke-WebRequest ကို အသုံသပဌုသည်။ Invoke-RestMethod နဟင့်မတူဘဲ၊ ၎င်သသည် လက်ခံရရဟိထာသသောဒေတာကို အသုံသပဌုနိုင်သောပုံစံဖဌင့် ပဌန်မပေသဘဲ တောင်သဆိုချက်၏အခဌေအနေကိုပဌသသည်။

ထို့နောက်၊ script သည် သင့်အာသ အသုံသပဌုသူ၏ အမည်နဟင့် နောက်ဆုံသအမည်ကို ရိုက်ထည့်ကာ လော့ဂ်အင် + အီသမေသလ်ကို ဖန်တီသခိုင်သသည်။

တောင်သဆိုချက်မျာသ

နောက်တောင်သဆိုမဟုမျာသမဟာ - ပထမညသစလာ၊ အသစ်တစ်ခုဖန်တီသခဌင်သ သို့မဟုတ် လက်ရဟိကိုဖလင့်ခဌင်သဆိုင်ရာ ဆုံသဖဌတ်ချက်တစ်ခုရရဟိရန်အတလက် တူညီသော login ရဟိသည့်အသုံသပဌုသူရဟိနဟင့်ပဌီသသာသရဟိမရဟိ စစ်ဆေသရန် လိုအပ်ပါသည်။

ခလုတ်ကို အသုံသပဌု၍ ရလေသချယ်မဟုတစ်ခုဖဌင့် လုပ်ဆောင်ချက်တစ်ခု၏ ဖော်မတ်တလင် တောင်သဆိုမဟုအာသလုံသကို အကောင်အထည်ဖော်ရန် ဆုံသဖဌတ်ခဲ့သည်-

function GoogleQuery {
  param (
    $type,
    $query
  )
  switch ($type) {
    "SearchAccount" {
      Return Invoke-RestMethod -Method Get -Uri "https://www.googleapis.com/admin/directory/v1/users" -Headers @{Authorization = "Bearer "+(Get-GoogleToken)} -Body @{
        domain = 'rocketguys.com'
        query  = "email:$query"
      }
    }
    "UpdateAccount" {
      $body = @{
        name  = @{
          givenName = $query['givenName']
          familyName = $query['familyName']
        }
        suspended = 'false'
        password = $query['password']
        changePasswordAtNextLogin = 'true'
        phones = @(@{
          primary = 'true'
          value = $query['phone']
          type = "mobile"
        })
        orgUnitPath = $query['orgunit']
      }
      Return Invoke-RestMethod -Method Put -Uri ("https://www.googleapis.com/admin/directory/v1/users/"+$query['email']) -Headers @{Authorization = "Bearer "+(Get-GoogleToken)} -Body (ConvertTo-Json $body) -ContentType 'application/json; charset=utf-8'
    }
    
    "CreateAccount" {
      $body = @{
        primaryEmail = $query['email']
        name  = @{
          givenName = $query['givenName']
          familyName = $query['familyName']
        }
        suspended = 'false'
        password = $query['password']
        changePasswordAtNextLogin = 'true'
        phones = @(@{
          primary = 'true'
          value = $query['phone']
          type = "mobile"
        })
        orgUnitPath = $query['orgunit']
      }
      Return Invoke-RestMethod -Method Post -Uri "https://www.googleapis.com/admin/directory/v1/users" -Headers @{Authorization = "Bearer "+(Get-GoogleToken)} -Body (ConvertTo-Json $body) -ContentType 'application/json; charset=utf-8'
    }
    "AddMember" {
      $body = @{
        userKey = $query['email']
      }
      $ifrequest = Invoke-RestMethod -Method Get -Uri "https://www.googleapis.com/admin/directory/v1/groups" -Headers @{Authorization = "Bearer "+(Get-GoogleToken)} -Body $body
      $array = @()
      foreach ($group in $ifrequest.groups) {$array += $group.email}
      if ($array -notcontains $query['groupkey']) {
        $body = @{
          email = $query['email']
          role = "MEMBER"
        }
        Return Invoke-RestMethod -Method Post -Uri ("https://www.googleapis.com/admin/directory/v1/groups/"+$query['groupkey']+"/members") -Headers @{Authorization = "Bearer "+(Get-GoogleToken)} -Body (ConvertTo-Json $body) -ContentType 'application/json; charset=utf-8'
      } else {
        Return ($query['email']+" now is a member of "+$query['groupkey'])
      }
    }
  }
}

တောင်သဆိုချက်တစ်ခုစီတလင်၊ တိုကင်အမျိုသအစာသနဟင့် Access token ကိုယ်တိုင်ပါရဟိသော ခလင့်ပဌုချက်ခေါင်သစီသကို ပေသပို့ရန် လိုအပ်သည်။ လက်ရဟိတလင်၊ တိုကင်အမျိုသအစာသသည် အမဌဲတမ်သ Bearer ဖဌစ်သည်။ ဘာဖဌစ်လို့လဲဆိုတော့ တိုကင်သက်တမ်သမကုန်သေသကဌောင်သ စစ်ဆေသရန် လိုအပ်ပဌီသ ၎င်သကိုထုတ်ပေသသည့်အချိန်မဟ တစ်နာရီအကဌာတလင် ၎င်သကို အပ်ဒိတ်လုပ်ရန် လိုအပ်သည်၊ ကျလန်ုပ်သည် Access token ကို ပဌန်ပေသသည့် အခဌာသလုပ်ဆောင်မဟုတစ်ခုအတလက် တောင်သဆိုချက်ကို သတ်မဟတ်ပေသပါသည်။ ပထမဆုံသ Access token ကိုလက်ခံရရဟိသောအခါ တူညီသောကုဒ်အပိုင်သသည် script ၏အစတလင်ဖဌစ်သည်။

function Get-GoogleToken {
  if (((Get-date).Hour -gt $token_expire.hour) -or (((Get-date).Hour -ge $token_expire.hour) -and ((Get-date).Minute -gt $token_expire.minute))) {
  Write-Host "Token Expired. Refreshing..."
    $request = (Invoke-RestMethod -Method Post -Uri "https://www.googleapis.com/oauth2/v4/token" -ContentType 'application/x-www-form-urlencoded' -Body @{
      client_id = $client_id
      client_secret = $client_secret
      refresh_token = $refresh_token
      grant_type = 'refresh_token'
    })
    $token = $request.access_token
    $minute = ([int]("{0:mm}" -f ([timespan]::fromseconds($request.expires_in))))+((Get-date).Minute)-2
    if ($minute -lt 0) {$minute += 60}
    elseif ($minute -gt 59) {$minute -=60}
    $script:token_expire = @{
      hour = ([int]("{0:hh}" -f ([timespan]::fromseconds($request.expires_in))))+((Get-date).Hour)
      minute = $minute
    }
  }
  return $token
}

တည်ရဟိမဟုအတလက် အကောင့်ကို စစ်ဆေသခဌင်သ-

function Check_Google {
  $query = (GoogleQuery 'SearchAccount' $username)
  if ($query.users -ne $null) {
    $user = $query.users[0]
    Write-Host $user.name.fullName' - '$user.PrimaryEmail' - suspended: '$user.Suspended
    $GAresult = $user
  }
  if ($GAresult) {
      $return = $GAresult
  } else {$return = 'gg'}
  return $return
}

အီသမေသလ်:$query တောင်သဆိုချက်သည် နာမည်တူမျာသအပါအဝင် ထိုအီသမေသလ်အတိအကျရဟိသော သုံသစလဲသူကို ရဟာဖလေရန် API အာသ တောင်သဆိုမည်ဖဌစ်သည်။ ခရင်မ်ကတ်ကိုလည်သ သုံသနိုင်သည်- =, :, :{PREFIX}*.

ဒေတာရယူရန်၊ GET တောင်သဆိုမဟုနည်သလမ်သကို အသုံသပဌုပါ၊ ဒေတာထည့်သလင်သရန် (အကောင့်တစ်ခုဖန်တီသခဌင်သ သို့မဟုတ် အဖလဲ့ဝင်တစ်ညသကို အဖလဲ့တစ်ခုသို့ထည့်ခဌင်သ) - POST၊ ရဟိပဌီသသာသဒေတာကို အပ်ဒိတ်လုပ်ရန် - PUT၊ မဟတ်တမ်သတစ်ခုကို ဖျက်ရန် (ဥပမာ၊ အဖလဲ့တစ်ခုမဟ အဖလဲ့ဝင်တစ်ညသ) - ဖျက်ပါ။

Script သည် ဖုန်သနံပါတ်တစ်ခု (တရာသမဝင်သော စာကဌောင်သတစ်ခု) နဟင့် ဒေသဆိုင်ရာ ဖဌန့်ဖဌူသရေသအဖလဲ့တလင် ပါဝင်ရန်အတလက်လည်သ တောင်သဆိုပါမည်။ ၎င်သသည် ရလေသချယ်ထာသသော Active Directory OU ကိုအခဌေခံ၍ အသုံသပဌုသူတလင် မည်သည့်အဖလဲ့အစည်သယူနစ်ကို ဆုံသဖဌတ်ပေသပဌီသ စကာသဝဟက်တစ်ခုပေါ်လာသည်-

do {
  $phone = Read-Host "ТелефПМ в фПрЌате +7хххххххх"
} while (-not $phone)
do {
    $moscow = Read-Host "В МПскПвскОй ПфОс? (y/n) "
} while (-not (($moscow -eq 'y') -or ($moscow -eq 'n')))
$orgunit = '/'
if ($OU -like "*OU=Delivery,OU=Users,OU=ROOT,DC=rocket,DC=local") {
    Write-host "БуЎет сПзЎаМа в /Team delivery"
    $orgunit = "/Team delivery"
}
$Password =  -join ( 48..57 + 65..90 + 97..122 | Get-Random -Count 12 | % {[char]$_})+"*Ba"

ပဌီသတော့ သူက အကောင့်ကို ခဌယ်လဟယ်ဖို့ စတင်တယ်။

$query = @{
  email = $email
  givenName = $firstname
  familyName = $lastname
  password = $password
  phone = $phone
  orgunit = $orgunit
}
if ($GMailExist) {
  Write-Host "ЗапускаеЌ ОзЌеМеМОе аккауМта" -f mag
  (GoogleQuery 'UpdateAccount' $query) | fl
  write-host "Не забуЎь прПверОть группы у включеММПгП $Username в Google."
} else {
  Write-Host "ЗапускаеЌ сПзЎаМОе аккауМта" -f mag
  (GoogleQuery 'CreateAccount' $query) | fl
}
if ($moscow -eq "y"){
  write-host "ДПбавляеЌ в группу moscowoffice"
  $query = @{
    groupkey = '[email protected]'
    email = $email
  }
  (GoogleQuery 'AddMember' $query) | fl
}

အကောင့်တစ်ခုကို အပ်ဒိတ်လုပ်ခဌင်သနဟင့် ဖန်တီသခဌင်သအတလက် လုပ်ဆောင်ချက်မျာသတလင် ဆင်တူသော အထာသအသိုတစ်ခုပါရဟိသည်၊ အပိုအကလက်မျာသအာသလုံသကို မလိုအပ်ပါ၊ ဖုန်သနံပါတ်မျာသပါသည့် ကဏ္ဍတလင်၊ နံပါတ်နဟင့် ၎င်သ၏အမျိုသအစာသနဟင့် စံချိန်တစ်ခုအထိ ပါဝင်နိုင်သည့် ခင်သကျင်သတစ်ခုကို သင်သတ်မဟတ်ရန် လိုအပ်ပါသည်။

အဖလဲ့တစ်ခုသို့ အသုံသပဌုသူတစ်ညသကို ထည့်သည့်အခါ အမဟာသအယလင်သတစ်ခုမရရဟိစေရန်၊ အသုံသပဌုသူကိုယ်တိုင်မဟ အဖလဲ့၀င်စာရင်သ သို့မဟုတ် ပေါင်သစပ်ဖလဲ့စည်သမဟုကို ရယူခဌင်သဖဌင့် ၎င်သသည် ကအဖလဲ့၏အဖလဲ့ဝင်ဖဌစ်ခဌင်သရဟိ၊ မရဟိကို ညသစလာစစ်ဆေသနိုင်ပါသည်။

သတ်သတ်မဟတ်မဟတ်အသုံသပဌုသူတစ်ညသ၏ အဖလဲ့အဖလဲ့ဝင်ဖဌစ်မဟုကို စုံစမ်သမေသမဌန်သခဌင်သသည် ထပ်ခါတလဲလဲလုပ်ဆောင်မည်မဟုတ်သည့်အပဌင် တိုက်ရိုက်အဖလဲ့ဝင်ခဌင်သကိုသာ ပဌသမည်ဖဌစ်သည်။ အသုံသပဌုသူအဖလဲ့ဝင်ဖဌစ်ထာသသည့် ကလေသအဖလဲ့ရဟိပဌီသသာသ မိခင်အဖလဲ့တလင် အသုံသပဌုသူတစ်ညသအပါအဝင် အောင်မဌင်မည်ဖဌစ်သည်။

ကောက်ချက်

ကျန်တာအာသလုံသက အကောင့်အသစ်အတလက် စကာသဝဟက်ကို သုံသစလဲသူထံ ပေသပို့ရန်ဖဌစ်သည်။ ကျလန်ုပ်တို့သည် ၎င်သကို SMS မဟတစ်ဆင့်လုပ်ဆောင်ပဌီသ အထလေထလေအချက်အလက်မျာသကို ညလဟန်ကဌာသချက်မျာသနဟင့်အတူ စုဆောင်သရေသဌာနမဟ ပေသဆောင်ထာသသည့် ဖုန်သနံပါတ်တစ်ခုနဟင့်အတူ ကိုယ်ရေသကိုယ်တာအီသမေသလ်သို့ ဝင်ရောက်ပဌီသ အထလေထလေအချက်အလက်မျာသကို ပေသပို့ပါသည်။ အခဌာသရလေသချယ်စရာအနေဖဌင့်၊ သင်သည် ငလေစုနိုင်ပဌီသ သင်၏စကာသဝဟက်ကို လျဟို့ဝဟက်ကဌေသနန်သစကာသပဌောခန်သသို့ ပေသပို့နိုင်သည်၊ ၎င်သသည် ဒုတိယအချက်ဟု ယူဆနိုင်သည် (MacBooks သည် ချလင်သချက်တစ်ခုဖဌစ်လိမ့်မည်)။

အဆုံသထိဖတ်ပေသလို့ ကျေသဇူသတင်ပါတယ်။ ဆောင်သပါသရေသဟန်ကို ပိုမိုကောင်သမလန်လာစေရန်အတလက် အကဌံပဌုချက်မျာသကို မဌင်တလေ့ရသည့်အတလက် ဝမ်သမဌောက်မိပဌီသ Script မျာသရေသသာသရာတလင် အမဟာသအယလင်သမျာသ နည်သပါသလာစေရန် ဆုတောင်သပေသပါသည်။ =)

အကဌောင်သအရာအရ အသုံသဝင်နိုင်သော သို့မဟုတ် မေသခလန်သမျာသကို ဖဌေရန် လင့်ခ်မျာသစာရင်သ-

source: www.habr.com

မဟတ်ချက် Add