Bydd yr erthygl hon yn disgrifio gweithrediad rhyngweithio PowerShell ag API Google i drin defnyddwyr G Suite.
Rydym yn defnyddio nifer o wasanaethau mewnol a gwasanaethau cwmwl ar draws y sefydliad. Ar y cyfan, mae awdurdodiad ynddynt yn dod i lawr i Google neu Active Directory, na allwn gadw atgynhyrchiad rhyngddynt; yn unol â hynny, pan fydd gweithiwr newydd yn gadael, mae angen i chi greu / galluogi cyfrif yn y ddwy system hyn. Er mwyn awtomeiddio'r broses, fe benderfynon ni ysgrifennu sgript sy'n casglu gwybodaeth a'i hanfon i'r ddau wasanaeth.
Awdurdodi
Wrth lunio'r gofynion, penderfynasom ddefnyddio gweinyddwyr dynol go iawn ar gyfer awdurdodi; mae hyn yn symleiddio'r dadansoddiad o gamau gweithredu pe bai newidiadau enfawr damweiniol neu fwriadol.
Dewisais y sgript a ddefnyddir ar gyfer awdurdodi mewn cymwysiadau bwrdd gwaith. Mae yna hefyd opsiwn i ddefnyddio cyfrif gwasanaeth, nad oes angen symudiadau diangen gan y defnyddiwr.
Mae'r llun isod yn ddisgrifiad sgematig o'r senario a ddewiswyd o dudalen Google.
Yn gyntaf, rydym yn anfon y defnyddiwr i dudalen dilysu Cyfrif Google, gan nodi paramedrau GET:
id cais
ardaloedd y mae'r cais angen mynediad iddynt
y cyfeiriad y bydd y defnyddiwr yn cael ei ailgyfeirio iddo ar ôl cwblhau'r weithdrefn
y ffordd y byddwn yn diweddaru'r tocyn
Cod Diogelwch
fformat trosglwyddo cod dilysu
Ar ôl cwblhau'r awdurdodiad, bydd y defnyddiwr yn cael ei ailgyfeirio i'r dudalen a nodir yn y cais cyntaf, gyda gwall neu god awdurdodi wedi'i basio gan baramedrau GET
Bydd angen i'r cais (sgript) dderbyn y paramedrau hyn ac, os derbynnir y cod, gwneud y cais canlynol i gael tocynnau
Os yw'r cais yn gywir, mae API Google yn dychwelyd:
Tocyn mynediad y gallwn wneud ceisiadau ag ef
Cyfnod dilysrwydd y tocyn hwn
Mae angen tocyn adnewyddu i adnewyddu'r tocyn Mynediad.
Yn gyntaf mae angen i chi fynd i'r consol API Google: Manylion - Google API Console, dewiswch y cais a ddymunir ac yn yr adran Credentials creu dynodwr OAuth cleient. Yno (neu'n ddiweddarach, ym mhhriodweddau'r dynodwr a grëwyd) mae angen i chi nodi'r cyfeiriadau y caniateir ailgyfeirio iddynt. Yn ein hachos ni, bydd y rhain yn nifer o gofnodion localhost gyda gwahanol borthladdoedd (gweler isod).
Er mwyn ei gwneud yn fwy cyfleus i ddarllen yr algorithm sgript, gallwch arddangos y camau cyntaf mewn swyddogaeth ar wahân a fydd yn dychwelyd Mynediad ac adnewyddu tocynnau ar gyfer y rhaglen:
Rydym yn gosod yr ID Cleient a Chyfrinach y Cleient a gafwyd ym mhhriodweddau dynodwr cleient OAuth, ac mae'r dilysydd cod yn llinyn o 43 i 128 nod y mae'n rhaid ei gynhyrchu ar hap o nodau heb eu cadw: [AZ] / [az] / [0-9] /"-"/"." / "_" / "~".
Yna bydd y cod hwn yn cael ei drosglwyddo eto. Mae'n dileu'r bregusrwydd y gallai ymosodwr ryng-gipio ymateb a ddychwelwyd fel ailgyfeiriad ar ôl awdurdodiad defnyddiwr.
Gallwch anfon dilysydd cod yn y cais cyfredol mewn testun clir (sy'n ei wneud yn ddiystyr - dim ond ar gyfer systemau nad ydynt yn cynnal SHA256 y mae hyn yn addas), neu trwy greu hash gan ddefnyddio'r algorithm SHA256, y mae'n rhaid ei amgodio yn BASE64Url (gwahanol o Base64 gan ddau nod tabl) a thynnu'r terfyniadau llinell nodau: =.
Nesaf, mae angen i ni ddechrau gwrando ar http ar y peiriant lleol er mwyn derbyn ymateb ar ôl awdurdodi, a fydd yn cael ei ddychwelyd fel ailgyfeiriad.
Perfformir tasgau gweinyddol ar weinydd arbennig, ni allwn ddiystyru'r posibilrwydd y bydd sawl gweinyddwr yn rhedeg y sgript ar yr un pryd, felly bydd yn dewis porthladd ar gyfer y defnyddiwr presennol ar hap, ond nodais borthladdoedd wedi'u diffinio ymlaen llaw oherwydd rhaid eu hychwanegu hefyd fel rhai y gellir ymddiried ynddynt yn y consol API.
access_type=all-lein yn golygu y gall y rhaglen ddiweddaru tocyn sydd wedi dod i ben ar ei ben ei hun heb ryngweithio defnyddiwr â'r porwr, response_type=cod yn gosod fformat sut y bydd y cod yn cael ei ddychwelyd (cyfeiriad at yr hen ddull awdurdodi, pan gopïodd y defnyddiwr y cod o'r porwr i'r sgript), cwmpas yn nodi cwmpas a math y mynediad. Rhaid eu gwahanu gan fylchau neu % 20 (yn ôl Amgodio URL). Mae rhestr o ardaloedd mynediad gyda mathau i’w gweld yma: OAuth 2.0 Cwmpas ar gyfer APIs Google.
Ar ôl derbyn y cod awdurdodi, bydd y cais yn dychwelyd neges agos i'r porwr, yn rhoi'r gorau i wrando ar y porthladd ac yn anfon cais POST i gael y tocyn. Rydyn ni'n nodi ynddo'r id a'r gyfrinach a nodwyd yn flaenorol o API y consol, y cyfeiriad y bydd y defnyddiwr yn cael ei ailgyfeirio iddo a grant_type yn unol â manyleb y protocol.
Mewn ymateb, byddwn yn derbyn tocyn Mynediad, ei gyfnod dilysrwydd mewn eiliadau, a thocyn Adnewyddu, y gallwn ei ddefnyddio i ddiweddaru'r tocyn Mynediad.
Rhaid i'r cais storio tocynnau mewn man diogel gydag oes silff hir, felly hyd nes y byddwn yn dirymu'r mynediad a dderbyniwyd, ni fydd y cais yn dychwelyd y tocyn adnewyddu. Ar y diwedd, ychwanegais gais i ddirymu'r tocyn; os na chafodd y cais ei gwblhau'n llwyddiannus ac na ddychwelwyd y tocyn adnewyddu, bydd yn dechrau'r weithdrefn eto (roeddem yn ystyried ei bod yn anniogel storio tocynnau'n lleol ar y derfynell, ac ni wnaethom 'ddim eisiau cymhlethu pethau gyda cryptograffeg neu agor y porwr yn aml).
Fel y sylwoch eisoes, wrth ddirymu tocyn, defnyddir Invoke-WebRequest. Yn wahanol i Invoke-RestMethod, nid yw'n dychwelyd y data a dderbyniwyd mewn fformat y gellir ei ddefnyddio ac mae'n dangos statws y cais.
Nesaf, mae'r sgript yn gofyn ichi nodi enw cyntaf ac olaf y defnyddiwr, gan gynhyrchu mewngofnodi + e-bost.
Ceisiadau
Y ceisiadau nesaf fydd - yn gyntaf oll, mae angen i chi wirio a yw defnyddiwr gyda'r un mewngofnodi eisoes yn bodoli er mwyn cael penderfyniad ar greu un newydd neu alluogi'r un cyfredol.
Penderfynais weithredu pob cais ar ffurf un swyddogaeth gyda detholiad, gan ddefnyddio switsh:
Ym mhob cais, mae angen i chi anfon pennawd Awdurdodi sy'n cynnwys y math o docyn a'r tocyn Mynediad ei hun. Ar hyn o bryd, mae'r math tocyn bob amser yn Cludwr. Achos mae angen inni wirio nad yw'r tocyn wedi dod i ben a'i ddiweddaru ar ôl awr o'r eiliad y'i cyhoeddwyd, nodais gais am swyddogaeth arall sy'n dychwelyd tocyn Mynediad. Mae'r un darn o god ar ddechrau'r sgript wrth dderbyn y tocyn Mynediad cyntaf:
Bydd y cais e-bost:$query yn gofyn i'r API chwilio am ddefnyddiwr gyda'r e-bost hwnnw'n union, gan gynnwys arallenwau. Gallwch hefyd ddefnyddio cerdyn gwyllt: =, :, :{ RHAGAIR}*.
I gael data, defnyddiwch y dull cais GET, i fewnosod data (creu cyfrif neu ychwanegu aelod at grŵp) - POST, i ddiweddaru data presennol - PUT, i ddileu cofnod (er enghraifft, aelod o grŵp) - DILEU.
Bydd y sgript hefyd yn gofyn am rif ffôn (llinyn heb ei ddilysu) ac i'w gynnwys mewn grŵp dosbarthu rhanbarthol. Mae'n penderfynu pa uned sefydliadol y dylai'r defnyddiwr fod wedi'i seilio ar y Active Directory OU a ddewiswyd ac mae'n cynnwys cyfrinair:
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"
Ac yna mae'n dechrau trin y cyfrif:
$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
}
Mae gan y swyddogaethau ar gyfer diweddaru a chreu cyfrif gystrawen debyg; nid oes angen pob maes ychwanegol; yn yr adran â rhifau ffôn, mae angen i chi nodi arae a all gynnwys hyd at un cofnod gyda'r rhif a'i fath.
Er mwyn peidio â derbyn gwall wrth ychwanegu defnyddiwr at grŵp, gallwn wirio yn gyntaf a yw eisoes yn aelod o'r grŵp hwn trwy gael rhestr o aelodau'r grŵp neu gyfansoddiad gan y defnyddiwr ei hun.
Ni fydd cwestiynu aelodaeth grŵp defnyddiwr penodol yn ailadroddus a bydd yn dangos aelodaeth uniongyrchol yn unig. Bydd cynnwys defnyddiwr mewn grŵp rhieni sydd eisoes â grŵp plant y mae'r defnyddiwr yn aelod ohono yn llwyddo.
Casgliad
Y cyfan sydd ar ôl yw anfon y cyfrinair ar gyfer y cyfrif newydd at y defnyddiwr. Rydym yn gwneud hyn trwy SMS, ac yn anfon gwybodaeth gyffredinol gyda chyfarwyddiadau a mewngofnodi i e-bost personol, a ddarparwyd, ynghyd â rhif ffôn, gan yr adran recriwtio. Fel dewis arall, gallwch arbed arian ac anfon eich cyfrinair i sgwrs telegram cyfrinachol, y gellir ei ystyried hefyd yn ail ffactor (bydd MacBooks yn eithriad).
Diolch am ddarllen hyd y diwedd. Byddaf yn falch o weld awgrymiadau ar gyfer gwella arddull ysgrifennu erthyglau ac yn dymuno i chi ddal llai o wallau wrth ysgrifennu sgriptiau =)
Rhestr o ddolenni a all fod yn ddefnyddiol yn thematig neu ateb cwestiynau yn unig: