Il-ħolqien ta' Utenti ta' Google minn PowerShell permezz tal-API
Hi!
Dan l-artikolu se jiddeskrivi l-implimentazzjoni tal-interazzjoni ta 'PowerShell mal-API ta' Google biex jimmanipula l-utenti tal-G Suite.
Aħna nużaw diversi servizzi interni u cloud madwar l-organizzazzjoni. Fil-biċċa l-kbira tagħhom, l-awtorizzazzjoni fihom taqa’ għal Google jew Active Directory, li bejniethom ma nistgħux inżommu replika; għalhekk, meta jitlaq impjegat ġdid, trid toħloq/tippermetti kont f’dawn iż-żewġ sistemi. Biex nawtomatizza l-proċess, iddeċidejna li niktbu skript li jiġbor informazzjoni u jibgħatha liż-żewġ servizzi.
Awtorizzazzjoni
Meta nfasslu r-rekwiżiti, iddeċidejna li nużaw amministraturi umani reali għall-awtorizzazzjoni; dan jissimplifika l-analiżi tal-azzjonijiet fil-każ ta 'bidliet massivi aċċidentali jew intenzjonati.
Google APIs jużaw il-protokoll OAuth 2.0 għall-awtentikazzjoni u l-awtorizzazzjoni. Każijiet ta' użu u deskrizzjonijiet aktar dettaljati jistgħu jinstabu hawn: L-użu ta' OAuth 2.0 biex taċċessa l-APIs ta' Google.
Għażilt l-iskrittura li tintuża għall-awtorizzazzjoni fl-applikazzjonijiet tad-desktop. Hemm ukoll għażla li tuża kont tas-servizz, li ma jeħtieġx movimenti bla bżonn mill-utent.
L-istampa hawn taħt hija deskrizzjoni skematika tax-xenarju magħżul mill-paġna Google.
l-indirizz li lejh l-utent se jiġi ridirett wara li titlesta l-proċedura
il-mod kif se naġġornaw it-token
Kodiċi tas-Sigurtà
format tat-trażmissjoni tal-kodiċi tal-verifika
Wara li titlesta l-awtorizzazzjoni, l-utent jiġi ridirett lejn il-paġna speċifikata fl-ewwel talba, bi żball jew kodiċi ta’ awtorizzazzjoni mgħoddi mill-parametri GET
L-applikazzjoni (kitba) trid tirċievi dawn il-parametri u, jekk tirċievi l-kodiċi, tagħmel it-talba li ġejja biex tikseb tokens
Jekk it-talba hija korretta, il-Google API jirritorna:
Token ta' aċċess li bih nistgħu nagħmlu talbiet
Il-perjodu ta' validità ta' dan it-token
Aġġorna token meħtieġ biex jġedded it-token tal-Aċċess.
L-ewwel trid tmur fil-console Google API: Kredenzjali - Google API Console, agħżel l-applikazzjoni mixtieqa u fit-taqsima Kredenzjali oħloq identifikatur OAuth tal-klijent. Hemm (jew aktar tard, fil-proprjetajiet tal-identifikatur maħluq) trid tispeċifika l-indirizzi li għalihom hija permessa direzzjoni mill-ġdid. Fil-każ tagħna, dawn se jkunu diversi entrati localhost b'portijiet differenti (ara hawn taħt).
Biex tagħmilha aktar konvenjenti li taqra l-algoritmu tal-iskrittura, tista 'turi l-ewwel passi f'funzjoni separata li tirritorna Aċċess u tokens ta' aġġornament għall-applikazzjoni:
Aħna nissettjaw l-ID tal-Klijent u s-Sigriet tal-Klijent miksuba fil-proprjetajiet tal-identifikatur tal-klijent OAuth, u l-verifikatur tal-kodiċi huwa sensiela ta’ 43 sa 128 karattru li jridu jiġu ġġenerati b’mod każwali minn karattri mhux riżervati: [AZ] / [az] / [0-9 ] / "-" / "." / "_" / "~".
Dan il-kodiċi mbagħad jerġa' jiġi trażmess. Jelimina l-vulnerabbiltà li fiha attakkant jista' jinterċetta tweġiba rritornata bħala direzzjoni mill-ġdid wara l-awtorizzazzjoni tal-utent.
Tista 'tibgħat verifikatur tal-kodiċi fit-talba attwali f'test ċar (li jagħmilha bla sens - dan huwa adattat biss għal sistemi li ma jappoġġawx SHA256), jew billi toħloq hash bl-użu tal-algoritmu SHA256, li għandu jkun kodifikat f'BASE64Url (differenti minn Base64 b'żewġ karattri tat-tabella) u t-tneħħija tat-truf tal-linja tal-karattri: =.
Sussegwentement, irridu nibdew nisimgħu http fuq il-magna lokali sabiex nirċievu tweġiba wara l-awtorizzazzjoni, li tiġi rritornata bħala redirect.
Ħidmiet amministrattivi huma mwettqa fuq server speċjali, ma nistgħux neskludu l-possibbiltà li diversi amministraturi se jmexxu l-iskrittura fl-istess ħin, għalhekk se tagħżel b'mod każwali port għall-utent attwali, imma jien speċifikat portijiet predefiniti minħabba għandhom jiġu miżjuda wkoll bħala fdati fil-console API.
access_type=offline ifisser li l-applikazzjoni tista' taġġorna token skadut waħedha mingħajr interazzjoni tal-utent mal-browser, response_type=kodiċi jistabbilixxi l-format ta 'kif il-kodiċi se jiġi rritornat (referenza għall-metodu ta' awtorizzazzjoni l-antik, meta l-utent ikkopja l-kodiċi mill-browser għall-iskript), ambitu jindika l-ambitu u t-tip ta’ aċċess. Għandhom ikunu separati bi spazji jew %20 (skond l-Encoding tal-URL). Lista ta’ żoni ta’ aċċess bit-tipi tista’ tidher hawn: OAuth 2.0 Ambiti għal Google APIs.
Wara li tirċievi l-kodiċi ta 'awtorizzazzjoni, l-applikazzjoni se terġa' lura messaġġ mill-qrib lill-browser, tieqaf tisma 'fuq il-port u tibgħat talba POST biex tikseb it-token. Aħna nindikaw fiha l-id u sigriet speċifikati qabel mill-API tal-console, l-indirizz li għalih l-utent se jiġi ridirett u grant_type skont l-ispeċifikazzjoni tal-protokoll.
Bi tweġiba, se nirċievu token ta’ Aċċess, il-perjodu ta’ validità tiegħu f’sekondi, u token ta’ Aġġorna, li bih nistgħu naġġornaw it-token ta’ Aċċess.
L-applikazzjoni trid taħżen it-tokens f'post sigur b'ħajja twila fuq l-ixkaffa, għalhekk sakemm nirrevokaw l-aċċess riċevut, l-applikazzjoni ma tirritornax it-token tal-aġġornament. Fl-aħħar, żidt talba biex nirrevoka t-token; jekk l-applikazzjoni ma tlestietx b’suċċess u t-token ta’ aġġornament ma ġiex ritornat, se terġa’ tibda l-proċedura (konna nqisuha mhux sikur li nħażen it-tokens lokalment fuq it-terminal, u aħna don? ma tridx tikkomplika l-affarijiet bil-kriptografija jew tiftaħ il-browser ta 'spiss).
Kif diġà innotajt, meta tirrevoka token, tintuża Invoke-WebRequest. B'differenza mill-Invoke-RestMethod, ma jirritornax id-dejta riċevuta f'format użabbli u juri l-istatus tat-talba.
Sussegwentement, l-iskrittura titlobek biex iddaħħal l-isem u l-kunjom tal-utent, u tiġġenera login + email.
Talbiet
It-talbiet li jmiss se jkunu - l-ewwelnett, trid tiċċekkja jekk utent bl-istess login jeżistix diġà sabiex tikseb deċiżjoni dwar il-ħolqien ta 'wieħed ġdid jew l-abilitazzjoni ta' dik attwali.
Iddeċidejt li nimplimenta t-talbiet kollha fil-format ta' funzjoni waħda b'għażla, billi tuża swiċċ:
F'kull talba, trid tibgħat header tal-Awtorizzazzjoni li jkun fiha t-tip ta' token u t-token tal-Aċċess innifsu. Bħalissa, it-tip ta 'token huwa dejjem Bearer. Għax għandna bżonn niċċekkjaw li t-token ma skadiex u naġġornawh wara siegħa mill-mument li nħareġ, speċifikajt talba għal funzjoni oħra li tirritorna token ta 'Access. L-istess biċċa ta 'kodiċi tinsab fil-bidu tal-iskrittura meta tirċievi l-ewwel token ta' Aċċess:
L-email:$query talba se titlob lill-API biex tfittex utent b'dik l-email eżattament, inklużi psewdonimi. Tista' wkoll tuża wildcard: =, :, :{PREFISS}*.
Biex tikseb dejta, uża l-metodu ta 'talba GET, biex daħħal dejta (ħolqien ta' kont jew iżżid membru ma 'grupp) - POST, biex taġġorna dejta eżistenti - PUT, biex tħassar rekord (per eżempju, membru minn grupp) - Ħassar.
L-iskritt se jitlob ukoll numru tat-telefon (sekwenza mhux validata) u għall-inklużjoni fi grupp ta 'distribuzzjoni reġjonali. Jiddeċiedi liema unità organizzattiva l-utent għandu jkollu abbażi tal-OU Active Directory magħżula u toħroġ b'password:
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"
U mbagħad jibda jimmanipula l-kont:
$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
}
Il-funzjonijiet għall-aġġornament u l-ħolqien ta 'kont għandhom sintassi simili; mhux l-oqsma addizzjonali kollha huma meħtieġa; fit-taqsima bin-numri tat-telefon, għandek bżonn tispeċifika firxa li jista' jkun fiha sa rekord wieħed bin-numru u t-tip tiegħu.
Sabiex ma nirċievux żball meta nżidu utent ma’ grupp, l-ewwel nistgħu niċċekkjaw jekk hux diġà membru ta’ dan il-grupp billi niksbu lista ta’ membri tal-grupp jew kompożizzjoni mingħand l-utent innifsu.
L-istħarriġ dwar is-sħubija fil-grupp ta' utent speċifiku mhux se jkun rikorsiv u juri biss sħubija diretta. L-inklużjoni ta' utent fi grupp ġenitur li diġà għandu grupp tifel li l-utent huwa membru tiegħu jirnexxi.
Konklużjoni
Li jibqa' biss li tibgħat lill-utent il-password għall-kont il-ġdid. Nagħmlu dan permezz ta' SMS, u nibagħtu informazzjoni ġenerali bi struzzjonijiet u login f'email personali, li, flimkien ma' numru tat-telefon, ġiet ipprovduta mid-dipartiment tar-reklutaġġ. Bħala alternattiva, tista 'tiffranka l-flus u tibgħat il-password tiegħek għal chat telegramma sigrieta, li tista' titqies ukoll it-tieni fattur (MacBooks se tkun eċċezzjoni).
Grazzi talli qrajt sal-aħħar. Inkun ferħan nara suġġerimenti biex intejjeb l-istil tal-kitba ta' artikli u nixtieq li taqbad inqas żbalji meta tikteb skripts =)
Lista ta' links li jistgħu jkunu tematikament utli jew sempliċiment iwieġbu mistoqsijiet: