PowerShell-etik Google erabiltzaileak sortzea API bidez
Hi!
Artikulu honetan PowerShell-ek G Suite erabiltzaileak manipulatzeko Google APIarekin duen interakzioa ezartzea deskribatuko du.
Erakunde osoan barneko eta hodeiko hainbat zerbitzu erabiltzen ditugu. Gehienetan, horien baimena Google-ri edo Active Directoryri dagokio, eta horien artean ezin dugu erreplikarik mantendu; horregatik, langile berri bat uzten denean, kontu bat sortu/gaitu behar duzu bi sistema hauetan. Prozesua automatizatzeko, informazioa bildu eta bi zerbitzuetara bidaltzen duen script bat idaztea erabaki dugu.
baimen
Baldintzak egiterakoan, benetako giza administratzaileak erabiltzea erabaki dugu baimena lortzeko; horrek ekintzen azterketa errazten du ustekabeko edo nahita aldaketa masiboak gertatuz gero.
Google APIek OAuth 2.0 protokoloa erabiltzen dute autentifikaziorako eta baimenerako. Erabilera kasuak eta deskribapen zehatzagoak hemen aurki daitezke: OAuth 2.0 erabiltzea Google APIetara sartzeko.
Mahaigaineko aplikazioetan baimentzeko erabiltzen den script-a aukeratu dut. Zerbitzu-kontu bat erabiltzeko aukera ere badago, erabiltzailearen alferrikako mugimendurik behar ez duena.
Beheko irudia Google orrialdean hautatutako eszenatokiaren deskribapen eskematiko bat da.
Lehenik eta behin, erabiltzailea Google kontuaren autentifikazio orrira bidaltzen dugu, GET parametroak zehaztuz:
aplikazioaren id
aplikazioak atzitu behar dituen eremuak
prozedura amaitu ondoren erabiltzailea birbideratuko den helbidea
tokena eguneratuko dugun modua
Segurtasun kodea
egiaztapen-kodearen transmisio-formatua
Baimena amaitu ondoren, erabiltzailea lehen eskaeran zehaztutako orrira birbideratuko da, GET parametroek errore edo baimen-kode batekin.
Aplikazioak (gidoia) parametro hauek jaso beharko ditu eta, kodea jasoz gero, honako eskaera egin beharko du tokenak lortzeko
Eskaera zuzena bada, Google APIa itzultzen da:
Sarbide-tokenarekin eskaerak egin ditzakegu
Token honen balio-epea
Freskatu tokena behar da Access tokena freskatzeko.
Lehenik eta behin, Google API kontsolara joan behar duzu: Kredentzialak - Google API kontsola, hautatu nahi duzun aplikazioa eta Kredentzialak atalean sortu bezero OAuth identifikatzaile bat. Bertan (edo geroago, sortutako identifikatzailearen propietateetan) birbideratzea onartzen den helbideak zehaztu behar dituzu. Gure kasuan, portu ezberdineko lokalhost sarrera batzuk izango dira (ikus behean).
Script-algoritmoa irakurtzea erosoagoa izan dadin, aplikaziorako sarbidea eta freskatu tokenak itzuliko dituen funtzio bereizi batean bistaratu ditzakezu lehen urratsak:
OAuth bezeroaren identifikatzailearen propietateetan lortutako Bezero IDa eta Bezeroaren sekretua ezartzen ditugu, eta kode egiaztatzailea 43 eta 128 karaktere arteko kate bat da, erreserbarik gabeko karaktereetatik ausaz sortu behar dena: [AZ] / [az] / [0-9 ] / "-" / "." / "_" / "~".
Kode hau berriro transmitituko da. Erasotzaileak baimendu ondoren birbideratze gisa itzultzen den erantzuna atzemateko duen ahultasuna ezabatzen du.
Uneko eskaeran kode-egiaztapena testu argian bidal dezakezu (horrek zentzurik gabekoa da - SHA256 onartzen ez duten sistemetarako bakarrik da egokia), edo SHA256 algoritmoa erabiliz hash bat sortuz, BASE64Url-en kodetu behar dena (desberdina). Base64-tik taulako bi karaktereekin) eta karaktere lerroaren amaierak kenduz: =.
Ondoren, tokiko makinan http entzuten hasi behar dugu baimenaren ondoren erantzun bat jasotzeko, birbideratze gisa itzuliko dena.
Administrazio zereginak zerbitzari berezi batean egiten dira, ezin dugu baztertu hainbat administratzailek gidoia aldi berean exekutatzeko aukera, beraz, ausaz hautatuko du uneko erabiltzailearentzat ataka bat, baina aurrez definitutako atakak zehaztu ditut, fidagarri gisa ere gehitu behar dira API kontsolan.
access_type=lineaz kanpo esan nahi du aplikazioak iraungitako token bat eguneratu dezakeela bere kabuz, erabiltzaileak arakatzailearekin interakziorik izan gabe, erantzun_mota=kodea kodea nola itzuliko den formatua ezartzen du (baimen-metodo zaharraren erreferentzia, erabiltzaileak kodea arakatzailetik script-era kopiatu zuenean), esparrua sarbide-esparrua eta mota adierazten ditu. Zuriunez edo %20z bereizi behar dira (URL kodeketaren arabera). Motak dituzten sarbide-eremuen zerrenda hemen ikus daiteke: Google APIetarako OAuth 2.0 esparruak.
Baimen-kodea jaso ondoren, aplikazioak itxiko mezu bat itzuliko dio arakatzaileari, portuan entzuteari utziko dio eta tokena lortzeko POST eskaera bidaliko du. Bertan adieraziko dugu aurretik zehaztutako id eta sekretua kontsolaren APItik, erabiltzailea birbideratuko den helbidea eta grant_type protokoloaren zehaztapenaren arabera.
Horren harira, Access token bat jasoko dugu, bere balio-epea segundotan eta Fresh token bat, zeinekin Access token eguneratu ahal izateko.
Aplikazioak tokenak gorde behar ditu iraupen luzeko leku seguru batean, beraz, jasotako sarbidea ezeztatu arte, aplikazioak ez du freskatze tokena itzuliko. Amaieran, tokena baliogabetzeko eskaera bat gehitu dut; aplikazioa ez bada behar bezala osatu eta freskatzeko tokena itzuli ez bada, prozedura berriro hasiko da (ezin segurutzat jo dugu tokenak terminalean lokalean gordetzea, eta ez dugu ez da kriptografiarekin gauzak zaildu nahi edo arakatzailea maiz ireki).
Dagoeneko ohartu zaren bezala, token bat baliogabetzean, Invoke-WebRequest erabiltzen da. Invoke-RestMethod ez bezala, ez ditu jasotako datuak formatu erabilgarri batean itzultzen eta eskaeraren egoera erakusten du.
Ondoren, scriptak erabiltzailearen izena eta abizena sartzeko eskatzen dizu, saioa hasteko + posta elektronikoa sortuz.
Eskaerak
Hurrengo eskaerak izango dira: lehenik eta behin, egiaztatu behar duzu saio-hasiera bera duen erabiltzailerik dagoen ala ez, berri bat sortzeko edo oraingoa gaitzeko erabakia hartzeko.
Eskaera guztiak aukeraketa batekin funtzio baten formatuan ezartzea erabaki nuen, etengailua erabiliz:
Eskaera bakoitzean, Token mota eta Access token bera dituen Baimen goiburu bat bidali behar duzu. Gaur egun, token mota beti Bearer da. Zeren tokena iraungi ez dela egiaztatu eta ordubete igaro ondoren eguneratu behar dugu jaulki zenetik, Access token bat itzultzen duen beste funtzio baterako eskaera bat zehaztu nuen. Kode zati bera scriptaren hasieran dago lehen Access tokena jasotzean:
Email:$query eskaerak APIari eskatuko dio posta elektroniko hori duen erabiltzaile bat bilatzeko, aliasak barne. Komodinak ere erabil ditzakezu: =, :, :{AURREFIXO}*.
Datuak lortzeko, erabili GET eskaera metodoa, datuak txertatzeko (kontu bat sortu edo talde batean kide bat gehitzeko) - POST, dauden datuak eguneratzeko - PUT, erregistro bat ezabatzeko (adibidez, talde bateko kide bat) - EZABATU.
Gidoiak telefono-zenbaki bat ere eskatuko du (baliogabeko kate bat) eta eskualdeko banaketa talde batean sartzeko. Erabiltzaileak zein antolakuntza-unitate izan behar duen erabakitzen du hautatutako Active Directory OU-n oinarrituta eta pasahitz bat ateratzen du:
Kontua eguneratzeko eta sortzeko funtzioek antzeko sintaxia dute; eremu gehigarri guztiak ez dira beharrezkoak; telefono-zenbakien atalean, erregistro bat gehienez eduki dezakeen matrize bat zehaztu behar duzu zenbakia eta bere motarekin.
Erabiltzaile bat talde batean gehitzean errorerik jaso ez dadin, lehenik eta behin talde horretako kide den ala ez egiazta dezakegu, taldekideen zerrenda edo konposizioa erabiltzaileak berak lortuz.
Erabiltzaile zehatz baten talde-kidetasuna kontsultatzea ez da errekurtsiboa izango eta kide zuzena soilik erakutsiko du. Erabiltzailea kide den talde seme-alaba duen talde nagusi batean sartzeak arrakasta izango du.
Ondorioa
Kontu berriaren pasahitza erabiltzaileari bidaltzea besterik ez da geratzen. SMS bidez egiten dugu, eta informazio orokorra bidaltzen dugu argibideekin eta saioa hasteko posta elektroniko pertsonal batera, zeina, telefono zenbaki batekin batera, kontratazio sailak eman zuena. Alternatiba gisa, dirua aurreztu eta pasahitza telegram txat sekretu batera bidali dezakezu, bigarren faktoretzat har daitekeena ere (MacBooks salbuespena izango da).
Eskerrik asko bukaeraraino irakurtzeagatik. Pozik egongo naiz artikuluak idazteko estiloa hobetzeko iradokizunak ikusteaz eta gidoiak idaztean errore gutxiago harrapatzea nahi dut =)
Gaika erabilgarriak izan daitezkeen esteken zerrenda edo galderak besterik gabe erantzuten dituztenak: