Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Operativni sustavi
  • OAuth VKontakte: korištenje za osobnu korist. OAuth: opisivanje protokola na jednostavnom i razumljivom jeziku

OAuth VKontakte: korištenje za osobnu korist. OAuth: opisivanje protokola na jednostavnom i razumljivom jeziku


  1. Otvaranje ugrađenog preglednika sa stranicom za autorizaciju
  2. Od korisnika se traži da potvrdi dodjelu prava
  3. Ako se korisnik slaže, preglednik će preusmjeriti na rubnu stranicu u fragmentu (nakon #) čiji je URL dodan pristupni token
  4. Aplikacija presreće preusmjeravanje i prima pristupni token s adrese stranice
Ova opcija zahtijeva podizanje prozora preglednika u aplikaciji, ali ne zahtijeva stranu poslužitelja i dodatni poziv između poslužitelja za razmjenu autorizacijski kod na pristupni token.
Primjer
Otvorite preglednik sa stranicom za autorizaciju:
> GET /oauth/authorize?response_type=token&client_id=464119 HTTP/1.1 > Host: connect.mail.ru

Nakon što korisnik dodijeli prava, dolazi do preusmjeravanja na standardnu ​​stub stranicu, za Mail.Ru to je connect.mail.ru/oauth/success.html:
< HTTP/1.1 302 Found < Location: http://connect.mail.ru/oauth/success.html#access_token=FJQbwq9&token_type=bearer& expires_in=86400&refresh_token=yaeFa0gu

Aplikacija mora presresti posljednje preusmjeravanje, dobiti s adrese access_token i koristiti ga za pristup zaštićenim resursima.

Autorizacija prijave i lozinke

Autorizacija putem prijave i lozinke je jednostavan POST zahtjev koji se vraća pristupni token. Ova shema nije ništa novo, ali je uključena u standard radi općenitosti i preporučuje se samo kada druge opcije autorizacije nisu dostupne.
Primjer
> POST /oauth/token HTTP/1.1 > Host: connect.mail.ru > Content-Type: application/x-www-form-urlencoded > > grant_ty [e-mail zaštićen] corp.mail.ru& password=qwerty< HTTP/1.1 200 OK < Content-Type: application/json < < { < "access_token":"SlAV32hkKG", < "token_type":"bearer", < "expires_in":86400, < "refresh_token":"8xLOxBtZp8", < }
Opis u specifikaciji

Vraćanje prethodne autorizacije

Obično, pristupni token ima ograničen rok trajanja. To može biti korisno, na primjer, ako se prenosi preko otvorenih kanala. Kako biste izbjegli prisiljavanje korisnika da se prijavi nakon isteka roka pristupni token"i, u svim gore navedenim opcijama, pored pristupni token„možete se vratiti ponovo token za osvježavanje. Može se dobiti pristupni token korištenjem HTTP zahtjeva, slično autorizaciji prijave i lozinke.
Primjer
> POST /oauth/token HTTP/1.1 > Host: connect.mail.ru > Vrsta sadržaja: application/x-www-form-urlencoded > > grant_type=refresh_token&client_id=31337&client_secret=deadbeef&refresh_token=8xLOxBtZp< HTTP/1.1 200 OK < Content-Type: application/json < < { < "access_token":"Uu8oor1i", < "token_type":"bearer", < "expires_in":86400, < "refresh_token":"ohWo1ohr", < }

Popularan protokol koji dopušta društvenim usluge za međusobnu integraciju i pruža siguran način razmjene osobnih podataka. OAuth može povezati 2 usluge, od kojih svaka ima svoju korisničku bazu - to je ono što u ovom slučaju nazivam "društvenim". Kada počnete raditi s OAuthom, prvi je dojam da je protokol vrlo kompliciran i suvišan. U ovom članku pokušat ću objasniti osnove OAutha na ljudskom jeziku.

Primjer unakrsnog ovlaštenja

Vratimo se u 2005. godinu i zamislimo da pišemo društvenu mrežu. Ima obrazac za uvoz kontakata iz Gmail adresara. Što vam je potrebno za pristup vašim Gmail kontaktima? Naravno, prijava i lozinka iz kutije. Ali ako ih zamolimo da ih unesu na našu stranicu, korisnik će posumnjati da nešto nije u redu. Gdje je jamstvo da unesene lozinke ne spremamo na server? Stoga želimo da se unese lozinka samo na web stranici Gmaila, a nakon toga je omogućen pristup kontaktima putem GMail API-ja našoj društvenoj mreži (moguće privremeno). Dogovorimo se o uvjetima.
  • potrošač: potrošač; skripta za obradu obrasca za uvoz kontakata na društvenoj mreži.
  • Pružatelj usluga: pružatelj podataka; Gmail koji sadrži podatke iz adresara od interesa za potrošača.
  • korisnik: Korisnik koji ima račun i kod Potrošača i kod Davatelja usluga.
  • zaštićeni resurs: osobni podaci; kontakte iz adresara na Gmailu (tj. resursi davatelja usluga).
  • API pružatelja usluga: GMail API koji omogućuje bilo kojoj skripti da dobije kontakte iz GMail adresara.
OAuth zadatak- pobrinuti se da Korisnik ima priliku raditi na Potrošačkoj usluzi (na društvenoj mreži) sa zaštićenim podacima Pružatelja usluge (GMail), unoseći lozinku za te podatke isključivo na Davatelju usluge i ostajući na web stranici Potrošača . Nije tako teško, zar ne?

Po čemu se OAuth razlikuje od OpenID-a?

OAuth se često naziva "protokol robota", za razliku od OpenID-a, "korisnički protokol". Nemojte ih zbuniti!
  1. OpenID je protokol za ubrzanu registraciju. OpenID omogućuje korisniku da dobije račun na bilo kojoj usluzi bez unosa lozinke ako je već registriran negdje drugdje na internetu. (A zatim možete ući u uslugu bez unosa lozinke, ovlašteni ste "negdje".) Na primjer, ako imate Yandex račun, možete ga koristiti za "prijavu" na bilo koju uslugu koja podržava OpenID autorizaciju.
  2. OAuth je protokol za ovlašteni pristup API-ju treće strane. OAuth omogućuje skripti potrošača da dobije ograničen pristup API-ju podacima pružatelja usluga treće strane ako korisnik da zeleno svjetlo. Oni. to je sredstvo za pristup API-ju.

Policijska analogija

Zamislite da ste član Odjela za kriminalističku istragu koji tražite krajeve u slučaju krađe WebMoneya iz 1973. godine. Dogovorimo se oko uvjeta:
  • OAuth potrošač: Kriminalističko istraživanje.
  • korisnik: službenik Odjela za kriminalistiku.
  • Pružatelj usluga: Kartoteka arhive zločina.
  1. OpenID: djelatnik Odjela za kriminalističku obradu (Korisnik) dolazi do Card Indexa (Davatelja usluge), na ulazu predočava vjerodajnicu (Autorizaciju) i na licu mjesta prebira kartice u potrazi za informacijama.
  2. OAuth: zaposlenik Odjela za kriminalističku obradu (Korisnik) poziva Card Index (Davatelj usluge) izravno s posla (Potrošač). Javlja svoje prezime; ako ga prepoznaju (Ovlaštenje), traži popis svih zločina za 1973. godinu (API poziv).
Kao što vidite, OpenID i OAuth su različite stvari. OpenID vam omogućuje pristup određenim resursima na licu mjesta. OAuth omogućuje dobivanje nekih informacija s udaljene usluge putem API-ja.

Pregled ovog članka

Prije nego prijeđemo na glavni dio, da vidimo kako ćemo se točno kretati.
  1. Razmotrimo probleme koji nastaju tijekom "ručne" provedbe unakrsnog ovlaštenja.
  2. Razgovarajmo o tome što je "aplikacija" i tko je potrošač.
  3. Dotaknimo se osnova kriptografije.
  4. Označimo demo aplikaciju koju ćemo napisati u ovom članku.
  5. Odlučimo se za testni OAuth poslužitelj na kojem ćemo eksperimentirati.
  6. Prođimo kroz sve korake OAuth protokola i pružimo izvore skripte.

O izumu bicikala

Dobar način da nešto shvatite je da to učinite sami, nagazivši na sve grablje usput. Sada ćemo ponovno izumiti kotač: pokušat ćemo zamisliti kako bismo riješili problem interakcije između potrošača i pružatelja usluga bez ikakvih standardiziranih protokola.

Prvo, napišimo sam obrazac za uvoz GMail kontakta: Zatim ćemo zamoliti programere GMail-a da ga naprave tako da kada korisnik prijeđe na /auth.php URI, dobije obrazac za autorizaciju (u našem biciklističkom svijetu, GMail je napisan u PHP-u). Nakon uspješnog unosa lozinke, korisnik bi trebao biti preusmjeren na stranicu čiji je URL naveden u parametru retpath. Također, u URL-u mora biti proslijeđen neki tajni ključ koji se već može koristiti za pristup GMail API-ju.

Dakle, nakon unosa lozinke, korisnik će se vratiti na našu stranicu na sljedeću adresu: I mi ćemo se okrenuti GMail API-ju iz /import.php skripte, proslijediti mu ključ Y49xdN0Zo2B5v0RR i učitati kontakte: Pa, idemo sada prebrojite grablje (jer izbočine će biti prekasno za brojanje).

Prvi rake: zamjena povratne adrese retpath

Pa, naravno, pogodili ste da će napadač prvo postaviti link na svoju stranicu i natjerati vas da kliknete na nju. Kao rezultat toga, on će dobiti tajni ključ koji je vratio GMail, a time i vaše kontakte:

Drugi rake: "prisluškivanje" tajnog ključa

Pretpostavimo da smo na neki način zaštitili retpath, a sada može upućivati ​​samo na našu stranicu. No problem s parametrom tajne ostaje. Tajna se može proviriti odostraga ili presresti slušanjem WiFi prometa. Ili će vaša stranica jednog dana imati XSS ranjivost koja vam omogućuje da "povučete" tajni ključ. Ako se postavi na tajno, napadač će moći čitati vaš adresar. Dakle, morate zaštititi tajnu od presretanja (u idealnom slučaju, nemojte je uopće proslijediti kroz URL).

Treći rake: previše preusmjeravanja

Ako svaki API poziv zahtijeva drugačiju tajnu, tada ćemo morati organizirati onoliko preusmjeravanja na stranicu davatelja usluga koliko imamo poziva. Uz intenzivnu upotrebu API-ja, ovo radi vrlo sporo i nezgodno kako bi ...

Rake Four: Loša identifikacija potrošača

GMail, naravno, želi znati tko koristi njegov API. Dopustite pristup nekim stranicama i zabranite pristup drugima... To znači da prilikom formiranja zahtjeva u obliku uvoza kontakata, Potrošač (web stranica) mora biti “prezentovan” Davatelju usluge (GMail). U našem slučaju, ovu funkciju djelomično izvodi retpath (naziv stranice u njoj), ali ova metoda nije univerzalna, jer mehanizam "prezentacije" također mora biti uključen pri pozivanju API metoda.

Osnivanje OAuth-a

Važno je napomenuti da još uvijek ima mnogo "podvodnih grabulja". Ovdje ih neću opisivati, jer ove grablje leže u Marijanskom rovu (duboka 10920 m). Za opis ranjivosti bilo bi potrebno desetak stranica. Stoga ću skočiti ravno na opis OAuth-a, gdje su svi problemi već riješeni.

Aplikacija = potrošač + pristup API-ju

Kada radite s OAuthom, važno je da izraz potrošač nije ograničen na značenje "web-stranice". Potrošač je neki dodatak, a gdje se nalazi nije toliko bitno. Primjeri potrošača iz stvarnog života: Ali ne možete kuhati kašu samo iz OAutha. Doista, sve što OAuth daje je mogućnost prijave na udaljenu uslugu (davatelja usluga) i autoriziranih zahtjeva API-ju. Nije važno kako je ovaj API uređen: to može biti čisti SOAP, REST pristup itd. Glavna stvar je da svaka API metoda prihvaća posebne parametre kao ulaz, proslijeđene prema OAuth protokolu.

Token = ključ + tajna

Jedno od načela OAuth-a je da se privatni ključevi ne smiju javno prosljeđivati ​​u zahtjevima (razgovarali smo zašto u gornjem primjeru). Stoga protokol djeluje s konceptom Tokena. Token je vrlo sličan paru prijava + lozinka: prijava je otvorena informacija, a lozinka je poznata samo strani koja šalje i prima. U smislu OAuth-a, analogni login se zove Key, a analogni lozinke je Secret. Situacija kada je tajna poznata samo pošiljatelju i primatelju, ali nikome drugome, naziva se Zajednička tajna.

Dakle, ako se potrošač i pružatelj na neki način međusobno dogovore oko Zajedničke tajne, mogu otvoreno razmijeniti odgovarajuće ključeve (Ključ) u URL-u bez straha da će presretanje tih ključeva biti opasno. Ali kako zaštititi URL s ključem od krivotvorenja?

Poruka = ​​Dokument + Digitalni potpis

"Digitalni potpis" zvuči zastrašujuće, ali je zapravo prilično očito. Kada potpisujete dokument olovkom, potvrđujete da ste taj dokument napisali vi, a ne netko drugi. Vaš potpis je, takoreći, "dodan" dokumentu i ide s njim u "jedan set".

Slično, digitalni potpis se dodaje nekom bloku podataka, koji potvrđuje da osoba koja je generirala te podatke ne lažno predstavlja drugu osobu. Digitalni potpis ne kriptira dokument, samo jamči njegovu autentičnost! Potpisivanje omogućuje istu Zajedničku tajnu, koja je poznata primatelju i pošiljatelju, ali nikome drugome.

Kako radi? Neka naša $sharedSecret = 529AeGWg, a mi to šapnemo na uho primatelju. Želimo prenijeti poruku "Moj telefon je 1234567" uz zajamčenu zaštitu od krivotvorenja od strane napadača.

  1. Potrošač poruci dodaje digitalni potpis, općenito $transfer = $message. "-" . md5($message . $sharedSecret); // $transfer = "Moj telefon je 1234567" . "-" . md5("Moj telefon je 1234567" . "529AeGWg")
  2. Davatelj usluge uzima podatke, dijeli ih natrag na 2 dijela - $message i $signature - i radi potpuno istu operaciju: $signatureToMatch = md5($message . $sharedSecret); // $signatureToMatch = md5("Moj telefon je 1234567" . "529AeGWg"); Zatim ostaje samo usporediti rezultirajuću vrijednost $signatureToMatch s onim što je bilo u primljenim podacima $signature i prijaviti lažno ako se vrijednosti ne podudaraju.

Demonstracija kako OAuth radi s jednostavnom aplikacijom

Da bismo stekli dojam za OAuth, potrebne su nam dvije stvari:
  1. Skripta koja implementira klijentski dio protokola. Napisao sam baš tako malu PHP skriptu (link za zip arhivu). Ovo je widget koji se može umetnuti u PHP stranice.
  2. OAuth testni poslužitelj na kojem možemo eksperimentirati. U tu svrhu prikladno je koristiti RuTwit: postoji stranica http://rutvit.ru/apps/new , koja vam omogućuje dodavanje testne aplikacije za 30 sekundi. (Usput, povratni URL u obrascu može se izostaviti - i dalje ga prosljeđujemo iz testne skripte.)
Gledajući kod demo skripte i čitajući objašnjenja kasnije u članku, možete razumjeti detalje protokola.

Ovaj widget možete ugraditi na bilo koju PHP stranicu jednostavnim kopiranjem koda i podešavanjem izgleda. Prikazuju se svi tweetovi s servisa RuTwit označeni navedenim hash tagom, a moguće je dodati i nove tweetove (tu u igri dolazi OAuth). Widget koristi RuTwit API i OAuth autorizaciju, koji su, inače, isti kao i Twitter API standard. Ovu skriptu možete pokrenuti na svom testnom poslužitelju. Da biste to učinili, morate izvršiti tri koraka:

  1. Preuzmite kod skripte i rasporedite ga u bilo koji prikladan direktorij na web poslužitelju.
  2. Registrirajte novu testnu aplikaciju na OAuth poslužitelju.
  3. Nakon registracije aplikacije, zamijenite parametre OA_CONSUMER_KEY i OA_CONSUMER_SECRET u skripti vrijednostima primljenim od poslužitelja.

Registracija aplikacije i postavke

Razgovarajmo o tome odakle dolaze aplikacije i kako davatelj usluga saznaje za njih. Sve je vrlo jednostavno: Davatelj usluga ima poseban obrazac za prijavu koji svatko može koristiti. Evo primjera takvog oblika:


Nakon registracije aplikacije, dobivate 5 parametara koji su potrebni za rad s OAuthom. Evo kako bi mogli izgledati:


Ovdje su Consumer key i Consumer secret neka vrsta "login + password" vaše aplikacije (sjećate se gornjeg razgovora o tokenima? ovo je samo jedan od njih). Dopustite mi da vas podsjetim da je tajna potrošača Zajednička tajna, poznata samo pošiljatelju i primatelju, ali nikome drugome. Preostale 3 vrijednosti određuju URL-ove usluge, čije ćemo značenje sada razmotriti.

OAuth = dohvaćanje tokena zahtjeva + preusmjeravanje na autorizaciju + dohvaćanje tokena za pristup + API poziva

U primjeru GMail-a koristili smo 2 vrste udaljenih poziva: a) preusmjeravanje putem preglednika; b) pristup API-ju iz skripte.

Otkrili smo i niz sigurnosnih problema, što sugerira da bi izazova trebalo biti više. Ovo je ono što se događa u OAuth-u: dodaju se dodatni zahtjevi iz skripte Consumer davatelju, koji rade s tokenima. Pogledajmo ih.

  1. Obrada podnošenja obrasca. Nije dio OAutha, već dio naše aplikacije. Prije pristupa API-ju Davatelja, moramo primiti nalog za ovu radnju od korisnika. Evo primjera takve narudžbe:
  2. Dohvati token zahtjeva (interni zahtjev).
    • Skripta Consumer poziva URL zahtjeva za token Pružatelj: na primjer, api.rutvit.ru/oauth/request_token . Zahtjev prenosi potrošački ključ - "prijava na aplikaciju", a sam zahtjev se potpisuje korištenjem tajne potrošača - "lozinke aplikacije", koja ga štiti od krivotvorenja.
    • Kao odgovor, Pružatelj generira i vraća token pun smeća koji se zove Request Token. I dalje će nam trebati, pa ga moramo negdje spremiti - na primjer, u varijablu sesije $S_REQUEST_TOK.
  3. Preusmjeravanje na autorizaciju (preko preusmjeravanja preglednika). Sada naša aplikacija ima jedinstveni token zahtjeva. Za korištenje ovog tokena potrebno je dobiti dopuštenje korisnika, tj. Pitajte ga autorizirati token zahtjeva.
    • Potrošač preusmjerava preglednik na određeno Autorizirajte URL Pružatelj: na primjer, api.rutvit.ru/oauth/authorize . Ključ tokena zahtjeva se prosljeđuje u parametrima.
    • Pružatelj prikazuje obrazac za autorizaciju za svog korisnika i, ako je ovlašten, preusmjerava preglednik natrag. Gdje točno? I to specificiramo u parametru oauth_callback.
  4. Dohvati pristupni token (interni zahtjev). Dakle, preglednik se vratio u našu aplikaciju nakon niza preusmjeravanja. To znači da je autorizacija na Dobavljaču bila uspješna i da je tokenu zahtjeva dopušteno da radi. Međutim, u OAuth-u, iz sigurnosnih razloga, svaki token ima svoju vlastitu, strogo ograničenu svrhu. Na primjer, token zahtjeva se koristi samo za primanje potvrde od korisnika i ništa drugo. Za pristup resursima trebamo nabaviti novi token - Access Token - ili, kako kažu, "razmijeniti token zahtjeva za token za pristup".
    • Potrošač se odnosi na URL tokena pristupa- na primjer, api.rutvit.ru/oauth/access_token , - i traži da mu se da pristupni token umjesto njegovog tokena zahtjeva. Zahtjev je digitalno potpisan na temelju tajne tokena zahtjeva.
    • Pružatelj generira i vraća Access Token ispunjen smećem. Također u svojim tablicama označava da je pristup API-ju dopušten za ovaj Access Token. Naša aplikacija mora zadržati pristupni token ako će u budućnosti koristiti API.
  5. API poziva (interni zahtjev). Pa, sada imamo Access Token, i možemo proslijediti njegov ključ kada pozivamo API metode.
    • Potrošač generira zahtjev API-ju Dobavljača (na primjer, koristeći POST zahtjev prema REST ideologiji). Zahtjev prosljeđuje ključ pristupnog tokena i on se potpisuje korištenjem Zajedničke tajne ovog tokena.
    • Dobavljač upravlja pozivom API-ja i vraća podatke aplikaciji.

Kraj skripte: izlaz widgeta

Kraj scenarija treba biti jasan i bez detaljnih objašnjenja.
Listing 14: Kraj skripte: izlaz widgeta
// krajnji slučaj ) ) // Dobiti sve dostupne tweetove. $text = file_get_contents("http://api.rutvit.ru/search.xml?rpp=5&q=" . urlencode("#" . TAG)); $TWEETS = novi SimpleXMLElement($text); // Prečac za prikaz poruke s kodiranjem i citiranjem. funkcija e($text, $quote = 1) ( $text = iconv("utf-8", ENCODING, $text); echo $quote? htmlspecialchars($text) : $text; ) ?>
status kao $tweet) (?>
user->screen_name)?>: tekst_format, 0)?>
?action=form_is_sent" style="margin: 1em 0 0 0">

Korisne veze na OAuth-u

  • rutvit
Dodaj oznake

Kao rezultat toga, klijentska aplikacija koja koristi AdWords API može pristupiti AdWords računu bez adrese e-pošte i lozinke korisnika.

Izradite OAuth2 vjerodajnice

Da biste stvorili vjerodajnicu OAuth2, slijedite ove korake:

Definicija vrste aplikacije

Prvo, morate definirati vrsta aplikacije onaj koji želite stvoriti. U AdWords API-ju postoje dvije vrste aplikacija:

  • aplikacija koju treba instalirati(preporučeno);
  • web aplikacija.

Pomoću donje tablice odredite vrstu aplikacije koja vam je potrebna.

Što odabrati Situacija
Instalirana aplikacija(preporučeno)
  • Svim svojim AdWords računima upravljate s jednim računom upravitelja najviše razine.
  • Jeste li tek počeli ili želite brzo započeti.
  • Vaša će aplikacija raditi s jednim skupom AdWords računa s više korisnika.
Web aplikacija
  • Želite se autentifikovati kako biste različitim korisnicima dali različita prava pristupa podacima vašeg AdWords računa.
  • Morate stvoriti više skupova vjerodajnica, na primjer, za upravljanje računima trećih strana.
  • Vaša aplikacija zahtijeva URL-ove povratnog poziva koji nisu podržani u aplikacijama koje instalirate.
Pažnja!Čak i ako razvijate web aplikaciju, još uvijek možete odabrati koju aplikaciju želite instalirati. Glavna razlika je u tome trebate li nazvati natrag nakon izdavanja tokena. Na primjer, ako koristite jedan račun upravitelja najviše razine za upravljanje svim svojim AdWords računima, aplikacija koju instalirate mora biti registrirana, čak i ako je klijentska aplikacija dostupna na mreži. Bilješka.raspravlja se u nastavku. Ako vam nisu potrebne značajke računa usluge, toplo preporučujemo da koristite postupak autorizacije za instaliranu ili web-aplikaciju.

Napravite ID klijenta i šifru

Nakon što ste identificirali vrstu aplikacije, kliknite odgovarajuću karticu u nastavku i slijedite upute za izradu ID-a klijenta i šifre.

Instalirana aplikacija

  1. otvorena
  2. Kreirajte projekt Stvoriti.
  3. Izradite vjerodajnice, i onda - OAuth ID klijenta.
  4. Uštedjeti
  5. U odjeljku Vrsta aplikacije Odaberi Druge vrste i dati tražene podatke.
  6. Klik Stvoriti.
  7. identifikator I Tajni ključ
Web aplikacija
  1. otvorena
  2. Na padajućem izborniku projekata odaberite Kreirajte projekt, zatim navedite naziv projekta i po potrebi promijenite njegov ID, a zatim kliknite gumb Stvoriti.
  3. Na stranici vjerodajnice odaberite Izradite vjerodajnice, i onda - OAuth ID klijenta.
  4. Možda ćete biti upitani za naziv proizvoda. U tom slučaju pritisnite Prilagodite prozor zahtjeva za pristup, unesite tražene podatke i kliknite Uštedjeti za povratak na zaslon s vjerodajnicama.
  5. U odjeljku Vrsta aplikacije Odaberi Web aplikacija. Slijedite upute za pružanje JavaScript izvora i/ili URI-je preusmjeravanja.
  6. Klik Stvoriti.
  7. Na stranici koja se pojavi kopirajte identifikator I Tajni ključ klijent - trebat će vam prilikom postavljanja klijentske biblioteke.

Slijedite upute u nastavku da biste konfigurirali upotrebu vjerodajnica OAuth2 s bibliotekom klijenta vašeg jezika.

Bilješka.Ako odlučite ne koristiti jednu od naših klijentskih knjižnica, morat ćete implementirati procese za ili sami.

OAuth2 igralište

Alternativni način generiranja OAuth2 vjerodajnica je korištenje OAuth2 igralište. U kombinaciji s Google API konzolom, ovaj sustav vam omogućuje da sami kreirate OAuth2 tokene.

Sustav OAuth2 Playground namijenjen je onim korisnicima koji trebaju pristup računima samo za jedan račun upravitelja ili korisnik AdWordsa. Ako trebate zatražiti vjerodajnice za više korisnika, onda je bolje koristiti klijentske biblioteke kao što je gore opisano.

Postavljanje

Upozorenje.Koristiti OAuth2 igralište, morate stvoriti ID klijenta za . Ovaj jedini vrsta aplikacije koja radi s OAuth2 Playgroundom. Pročitajte više u odjeljku iznad.

Kako dobiti ID klijenta i tajni ključ

  1. otvorena
  2. Odaberite postojeći projekt s padajućeg izbornika ili stvorite novi.
  3. Na stranici vjerodajnice odaberite Izradite vjerodajnice, i onda - OAuth ID klijenta.
  4. U odjeljku Vrsta aplikacije Odaberi Web aplikacija.
  5. U odjeljku dodajte sljedeći redak: https://site/oauthplayground
  6. Klik Stvoriti.
  7. Zapiši identifikator I Tajni ključ klijenti navedeni na stranici koja se pojavi. Trebat će vam u sljedećem koraku.

Kako stvoriti tokene

Upozorenje.Google račun na koji ste prijavljeni u svom pregledniku određuje kojim AdWords računima možete pristupiti pomoću generiranih OAuth2 vjerodajnica. Možda bi bilo najbolje izvršiti ove korake u anonimnom načinu ili bez prijave na svoj Google račun. Vjerojatno ćete morati koristiti vjerodajnice koje nisu povezane s računom na kojem ste bili kada ste primili ID klijenta i tajni ključ.

Kako ukloniti OAuth2 Playground iz Client ID-a

Jer već jesi token za osvježavanje, više ne morate koristiti OAuth2 Playground kao dopušteni URI za preusmjeravanje. Da biste uklonili ovaj sustav s popisa, slijedite ove korake:

  1. Ići .
  2. Odaberite svoj projekt s padajućeg izbornika.
  3. Na stranici Vjerodajnice odaberite naziv ID-a klijenta.
  4. Uklonite https://site/oauthplayground u polju Dopušteni URI-ji za preusmjeravanje. Imajte na umu da morate barem otići jedan URI za preusmjeravanje.
  5. Klik Uštedjeti.

Dakle, imate OAuth vjerodajnice. Sada možete postaviti upit za AdWords API i koristiti ga za potrebnu klijentsku biblioteku.

OAuth2 računi usluge

Ovaj odjeljak opisuje kako pristupiti AdWords API-ju pomoću računa usluge.

Račun usluge je račun koji pripada aplikaciji, a ne pojedinom krajnjem korisniku. Računi usluge pružaju interakciju između web aplikacije i Googleove usluge. Vaša aplikacija poziva API u ime računa usluge bez izravnog uključivanja korisnika.

AdWords API omogućuje pristup računu usluge putem G Suite domena.

Račun usluge implementira OAuth2 proces koji koristi datoteku ključa koja je dostupna samo vašoj aplikaciji umjesto autorizacije korisnika.

Korištenje računa usluge pruža dvije značajne prednosti:

  • Autorizacija pristupa aplikacije Google API-ju se provodi u fazi postavljanja. Time se izbjegava gnjavaža zahtijevanja intervencije korisnika ili predmemoriranja tokena na drugim OAuth2 tokovima.
  • Lažno predstavljanje drugih korisnika u aplikaciji, ako je potrebno, obavlja se kao dio procesa tvrdnje OAuth2.
Bilješka. Ako ne koristite posebne značajke domene, kao što je lažno predstavljanje, preporučuje se korištenje procesa za . Unutar procesa za OAuth2 instalirane i web aplikacije, sudjelovanje korisnika potrebno je samo jednom, u trenutku odobravanja pristupa računu.

Alternativa uslužnim računima

Računi usluge naširoko se koriste za pružanje programskog pristupa API-jima putem OAuth2 protokola bez intervencije korisnika.

Međutim, postavljanje ovih računa za rad s AdWords API-jem nije jednostavno. Lakša alternativa je s trajnim tokenom za osvježavanje. Ovaj pristup omogućuje aplikaciji da zatraži nove pristupne tokene u bilo kojem trenutku.

Kao dio ovog procesa, morate postaviti autorizaciju aplikacije putem biblioteke klijenta kao što je gore opisano. To je potrebno učiniti samo jednom, jer tokeni za osvježavanje Google OAuth2 nikada ne istječu.

Zahtjevi

  • G Suite domena koju posjedujete, kao što je mydomain.com ili mybusiness.com.
  • AdWords API razvojni token i po mogućnosti testni račun.
  • za jezik koji se koristi.

Konfiguriranje pristupa za račun klijenta

Prvo morate stvoriti ključ računa usluge u Google API konzoli.

  1. Prijavite se na svoj G Suite račun, otvorite .
  2. Na padajućem izborniku projekata odaberite Kreirajte projekt, zatim unesite tražene podatke i kliknite gumb Stvoriti. Novi projekt će se pojaviti na aktivnom popisu.
  3. Na izborniku u gornjem lijevom kutu odaberite IAM i administracija, i onda - Servisni računi u izborniku s lijeve strane.
  4. Klik Izradite račun usluge na vrhu stranice.
  5. Navedite naziv računa usluge.
  6. Potvrdni okvir Napravite novi privatni ključ i odaberite vrstu ključa JSON.
  7. Potvrdni okvir Omogućite delegiranje pristupa podacima u G Suite domeni i unesite naziv proizvoda za prozor zahtjeva za pristup.
  8. Klik Stvoriti. Započet će preuzimanje datoteke ključa JSON. Spremite datoteku na sigurno mjesto gdje samo vi imate pristup.
  9. Na stranici Servisni računi pojavit će se novi račun usluge.
Bilješka. Budući da se lažno predstavljanje korisnika može kontrolirati samo na razini domene, da biste koristili račune usluge i proces odobravanja s uslugama Google OAuth2, potrebna vam je vlastita domena registrirana u G Suiteu. Svi korisnici domene koji koriste račun usluge s odgovarajućim dopuštenjima mogu se oponašati bilo kojeg korisnika domene.

Sigurnosni problemi

Budući da se G Suiteom upravlja na razini domene, morate sigurno zaštititi ključnu datoteku koja ovlaštenim računima omogućuje pristup Googleovim uslugama. To je posebno važno jer pružamo račun usluge s mogućnošću lažnog predstavljanja bilo kojeg korisnika u domeni.

Također se preporučuje da se svakom računu usluge odobri pristup samo jednom Google API-ju. Da biste to učinili, koristite polje opseg, što je opisano u sljedećem odjeljku. Ova preventivna mjera omogućuje vam da ograničite količinu podataka koja je otvorena za neovlašteni pristup u slučaju kompromitacije datoteke ključa.

Kako pružiti mogućnosti lažnog predstavljanja

Da biste svom uslužnom računu omogućili lažno predstavljanje, slijedite ove korake:

Sada možete pristupiti svom AdWords računu koristeći svoj račun usluge kao dio postupka odobrenja OAuth2.

Postavljanje knjižnice klijenta

Odaberite jezik za upute o postavljanju klijentske biblioteke.

Bilješka.Ako odlučite ne koristiti jednu od naših klijentskih knjižnica, morat ćete sami implementirati proces.

Optimiziranje OAuth2 zahtjeva

Ako vaša aplikacija ne koristi dijeljenje vjerodajnica, to može značajno povećati broj upita koji se šalju Googleu. Kao rezultat toga, naši poslužitelji mogu nametnuti ograničenja za takvu aplikaciju, što će usporiti njezinu izvedbu.

Ovaj odjeljak opisuje kako optimizirati upravljanje vjerodajnicama OAuth2 kako bi vaša aplikacija djelovala učinkovitije s AdWords API-jem.

Pažnja!Pod pojmom vjerodajnice ovo se odnosi na cijeli skup atributa vjerodajnice OAuth2, uključujući pristupni token i njegov datum isteka.

Strategije distribucije vjerodajnica

Distribucija vjerodajnica kroz zahtjeve API-ja poboljšava performanse i izbjegava pretjerana opterećenja i pogreške zbog kršenja ograničenja.

Strategija distribucije vjerodajnica ovisi o strukturi aplikacije.

U višenitnim aplikacijama, sesija svake niti mora koristiti iste vjerodajnice.

U višeprocesnim i distribuiranim aplikacijama mora se implementirati određena infrastruktura za prijenos vjerodajnica između procesa. Osim toga, potrebno je izbjegavati blokiranje niti i uvjete utrke.

U aplikaciji koja je i višeprocesna/distribuirana i s više niti, svaki proces mora kombinirati obje strategije.

Sljedeće su strategije za provjeru autentičnosti jednog AdWords računa, kao što je račun najvišeg upravitelja u hijerarhiji.

Zatim opisuje kako prilagoditi ove strategije za .

Višenitne aplikacije

U aplikacijama s više niti, vjerodajnice moraju biti dostupne različitim nitima. Ažuriranja vjerodajnica trebaju se vršiti sinkrono kako bi se izbjegli uvjeti utrke.

Ovaj dijagram prikazuje niti koje šalju zahtjeve AdWords API-ju tijekom izvođenja. Koristi se zajednički skup sesija (korisnika). Imajte na umu da svaka sesija mora koristiti isti objekt vjerodajnice. Kao odgovor na svaki API zahtjev, nit prima odgovarajuću sesiju (korisnika). Ako pristupni token treba osvježiti, to se mora učiniti sinkrono kako bi se izbjegli uvjeti utrke. Drugim riječima, objekt vjerodajnice mora biti siguran na niti.

Klijentske knjižnice olakšavaju prosljeđivanje vjerodajnica između niti. Svaka klijentska knjižnica ima objekt sesije (ili korisnika) s vjerodajnicama koje ponovno koristi tijekom svog životnog ciklusa. Da biste koristili vjerodajnice u svim sesijama, morate ih primijeniti kada kreirate svaku sesiju. U svim klijentskim knjižnicama vjerodajnice su objekt siguran niti koji se sinkrono ažurira kada istekne pristupni token.

Na primjer, u biblioteci Java klijenta morate stvoriti jednostruku klasu Credential i koristiti je za sve sesije.

Višeprocesne i distribuirane aplikacije

U višeprocesnim i distribuiranim aplikacijama dodjela vjerodajnica mora se obavljati kontinuirano. Kako biste izbjegli stanje utrke u kojem više poslužitelja pokušava ažurirati vjerodajnice u isto vrijeme (što dovodi do prevelikog broja zahtjeva za ažuriranje), preporučujemo da prisilno ažurirate i pružite ažurirane vjerodajnice svim procesima i poslužiteljima.

Na primjer, jedan zadatak ili usluga može povremeno ažurirati vjerodajnice i proslijediti ih u pohranu podataka, gdje će ih koristiti različiti poslužitelji.

Dijagram prikazuje periodično ažuriranje vjerodajnica i upisivanje njihovih svojstava u pohranu podataka. Svi poslužitelji tada primaju vjerodajnice prije nego što podnose zahtjev API-ju.

Zadatak ažuriranja

Zadatak ažuriranja povremeno ažurira vjerodajnice i šalje ih u pohranu podataka. Ovaj zadatak ne bi trebao čekati da trenutne vjerodajnice isteknu, jer će to uzrokovati neuspjeh aplikacije neko vrijeme zbog nedostatka valjanih vjerodajnica.

Najbolja alternativa je periodično prisilno osvježavanje, koje svaki put zamjenjuje vjerodajnice u pohrani podataka novima. Zadatak ažuriranja trebao bi se pokrenuti dosta prije nego što trenutne vjerodajnice isteknu, tako da ima dovoljno vremena u slučaju da dođe do prolazne pogreške. Možete započeti pokretanjem ažuriranja svakih 15 minuta.

Bilješka.Ako token za pristup vjerodajnicama istekne dok se obrađuje API zahtjev, zahtjev će i dalje uspjeti. Na primjer, ako ste kreirali dugotrajan upit i preostalo vam je manje od minute za pristup, rezultati će se i dalje vratiti.

Pohrana podataka

Skladište podataka koristi se za pružanje vjerodajnica različitim procesima i poslužiteljima.

Da biste to učinili, možete koristiti postojeću pohranu podataka ili stvoriti specijaliziranu preko koje će poslužitelji primati vjerodajnice. Moguća rješenja uključuju poslužitelje predmemorije (kao što su Memcached ili Infinispan) i NoSQL spremišta podataka (kao što je MongoDB).

Glavna svrha skladišta podataka je osigurati pouzdano sučelje za sve poslužitelje koji pristupaju API-ju. Njegov rad treba optimizirati za brzo čitanje podataka: poslužitelji i procesi će čitati vjerodajnice češće nego što se ažuriraju.

Zapamtite da vjerodajnice moraju biti sigurno pohranjene.

Kada spremate vjerodajnice, morate spremiti svojstvo expiry_time (trenutno vrijeme + expires_in) i refresh_token zajedno sa svojstvom access_token. Svojstvo expiry_time (istek tokena) izračunava se pomoću sljedeće formule: access_token vrijeme zahtjeva za obnovu + expires_in vrijeme (datum isteka tokena).

Skup poslužitelja

Svaki poslužitelj u bazenu dobiva najnovije vjerodajnice iz spremišta podataka prije slanja zahtjeva. Sve dok se zadatak ažuriranja uspješno izvodi, vjerodajnice će biti važeće. Međutim, ako zadatak ažuriranja ili skladište podataka ne uspije, mora postojati rezervni mehanizam.

Ako poslužitelj ili proces ne mogu dobiti vjerodajnice iz skladišta podataka, ili ako su vjerodajnice istekle, poslužitelj mora ažurirati svoje vjerodajnice kako bi aplikacija nastavila raditi s API-jem dok se problem ne riješi.

U procesima s više niti, morate koristiti istu strategiju za distribuciju vjerodajnica između niti.

Višestruka autentifikacija računa

Vjerodajnice stvorene za AdWords račun upravitelja mogu se koristiti za pristup svim podračunima. Korisnici s jednim računom upravitelja obično trebaju samo izraditi vjerodajnice za račun upravitelja najviše razine kako bi autorizirali aplikaciju za sve svoje AdWords podračune.

U drugim slučajevima, aplikacija treba pristup AdWords računima koji nisu međusobno povezani u hijerarhiji računa upravitelja. Ova situacija zahtijeva da izradite i održavate više vjerodajnica za različite račune, kao što su za svaki AdWords račun klijenta kojem imate pristup ili za svaki račun upravitelja najviše razine u neovisnim hijerarhijama.

Možete slijediti ove strategije za i za aplikacije uz minimalne izmjene. Kada koristite dijeljenu pohranu, vjerodajnice moraju biti indeksirane ID-om računa customerId kako bi se osiguralo da su vjerodajnice povezane s potrebnim računom. Osim toga, zadatak ažuriranja trebao bi ih ažurirati na vrijeme. Nakon povezivanja novog računa, možda ćete ga morati pokrenuti.

Konačno, u aplikacijama s više niti, trebali biste distribuirati objekt vjerodajnice samo među nitima koje se pokreću na računu s kojim je povezan.

Kako radi OAuth2

Bilješka. AdWords API još ne podržava istodobnu prijavu sa zahtjevom za podacima (hibridni) ili delegiranje ovlasti na razini domene (2LO).

Opseg

Pristupni token može pružiti različite stupnjeve pristupa podacima. Promjenjivi parametar opsega definira skup resursa i operacija kojima token omogućuje pristup. Prilikom zahtjeva za pristupni token, vaša aplikacija šalje jednu ili više vrijednosti parametru opsega.

U nastavku su trenutni i naslijeđeni opseg za AdWords API.

izvanmrežni pristup

Klijentska aplikacija koja koristi AdWords API obično zahtijeva izvanmrežni pristup. To se može dogoditi ako aplikacija treba pokrenuti skupne poslove kada korisnik pregledava vašu stranicu bez internetske veze.

Instalirane aplikacije prema zadanim postavkama koriste izvanmrežni pristup.

Zaglavlje HTTP zahtjeva

HTTP zaglavlje u svakom zahtjevu prema AdWords API poslužitelju mora sadržavati sljedeći obrazac:

Autorizacija: nositelj THE_ACCESS_TOKEN

POST … HTTP/1.1 Host: … Autorizacija: Nositelj 1/fFAGRNJru1FTz70BzhT3Zg Vrsta sadržaja: text/xml; charset=UTF-8 Dužina sadržaja: …

Pristupni tokeni i osvježavanja

U većini slučajeva, token za osvježavanje treba biti pohranjen na sigurnom mjestu jer će možda biti potreban kasnije. Pročitajte više o zahtjevu za pristupne tokene i osvježavanju u sljedećim vodičima:

Kada istječe pristupni token?

Pristupni token ima datum isteka, koji ovisi o vrijednosti expires_in . Pristupni token koji je istekao može se osvježiti tokenom za osvježavanje, no naše klijentske knjižnice to rade automatski.

Osim ako je drugačije navedeno, sadržaj ove stranice licenciran je pod licencom Creative Commons Attribution 3.0, a uzorci koda licencirani su pod licencom Apache 2.0. Za detalje, pogledajte našu. Java je registrirani zaštitni znak Oraclea i/ili njegovih podružnica.

Ažurirano 24. rujna 2018

Vrhunski povezani članci