OAuth: protokolli kirjeldus lihtsas ja arusaadavas keeles. Kuidas žetoone luua. Load ja märgid

Pahatahtliku rämpsposti levitamiseks VKontakte'is on palju võimalusi. Aga kahjurid ei maga, neile tuleb aina rohkem pähe huvitavaid ideid. Ja see osutus just nii. Petturid on õppinud seda kasutama pahatahtlike saitide hoiatuslehest mööda hiilimiseks.

Ja kõik sai alguse sellest, et ühel päeval ilmus mu seinale selline teade:


Huvi pärast jälgisin linki ja sattusin teisele andmepüügisaidile. Aga link ise tundus mulle imelik, nägi välja selline (pooled ASCII tähemärkidest):
vkontakte.ru/away.php ? juurde=http%3A%2F%2FApi.vKontakte.Ru%2F%2Fo%2561u%2574%…

Siit algab lõbu...
Analüüsime teist linki osade kaupa:

Mida iga valik tähendab:

  • client_id – rakenduse ID, mis nõuab autoriseerimist;
  • redirect_uri - aadress, kuhu access_token saadetakse (ümbersuunamise kaudu);
  • kuva – autoriseerimisakna tüüp (leht, hüpikaken, puute- ja wap).
Tegelikult sisaldas redirect_uri andmepüügisaidi aadressi. Kuna kuvamisparameetris tekkis viga (sisse läks prügi "?390852"), siis autoriseerimisakent ei kuvata, vaid suunati koheselt andmepüügi saidile parameetritega: error=invalid_request&error_description=Invalid+display+passed

See on VKontakte'i pahatahtlike saitide mustast nimekirjast möödahiilimise mõte. Kuvatakse ainult märguanne saidile api.vk.com ülemineku kohta. Ja ülemineku tulemusena läheme otse andmepüügisaidile, mis on mustas nimekirjas. Kui klõpsate lingil vkontakte.ru/away.php?to=vgostivk.dyndns**:

Nagu selgus, rippus häkitud kasutaja küljes rakendus, mis väidetavalt nõudis autoriseerimist:

Ja andmepüügisait ise oli päris huvitav. Disain, nagu ikka, võeti ühendust ja pakuti sisselogimist. Läbisin autoriseerimise juhusliku kirja ja parooli kaudu, neelasin võltsingu suurepäraselt alla. Siis oli veelgi huvitavam, pealehel oli uudis "Pavel Durovilt":

Pärast nupu "Loo isiklik loendur" klõpsamist järgnes imeline edenemisriba. Seejärel paluti näidata oma number ja saata sms:

Teoreetiliselt oleks pidanud peale edukat “aktiveerimist” kandma activ.php lehele, aga sinna ma ei pääsenud. Väljavõtted andmepüügisaidi JS-skriptidest:

...
if (nõutav olek == 200) (
// kui olek on 200 (OK) - väljasta kasutajale vastus
if (req.responseText == "ok" ) (
//statusElem.innerHTML = "Kõik on hästi!";
hanki_aktiveerimine();
}
if (req.responseText == "mitte" ) (statusElem.innerHTML = "Vigane aktiveerimiskood";}
//statusElem.innerHTML = "Serveri vastus: "+req.responseText;
...
funktsioon get_activation() (
document .location="activ.php" ;
}

* See lähtekood tõsteti esile Source Code Highlighteriga.


Tulemus: Petturid kasutavad OAuth 2.0 hoiatustest möödahiilimiseks, kasutaja parooli ja e-posti hankimiseks ning isegi petmiseks sms saatmine(kasutades tõenäoliselt abonemendisüsteemi).
  1. Sisseehitatud brauseri avamine autoriseerimislehega
  2. Kasutajal palutakse õiguste andmine kinnitada
  3. Kui kasutaja nõustub, suunab brauser selle fragmendi (pärast #) tühjelehele, mille URL on lisatud juurdepääsuluba
  4. Rakendus peatab ümbersuunamise ja võtab vastu juurdepääsuluba lehe aadressist
See suvand nõuab, et rakenduses oleks üles tõstetud brauseriaken, kuid see ei nõua tausta- ja lisakõne server-server vahetamiseks autoriseerimiskood peal juurdepääsuluba.
Näide
Avage autoriseerimislehega brauser:
> HANGI /oauth/authorize?response_type=token&client_id=464119 HTTP/1.1 > Host: connect.mail.ru

Pärast kasutaja õiguste andmist toimub ümbersuunamine tavalisele tünnilehele, Mail.Ru jaoks on see 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

Rakendus peab kinni püüdma viimase ümbersuunamise, saama aadressilt juurdepääsu_märk ja kasutage seda kaitstud ressurssidele juurdepääsuks.

Sisselogimine ja parooli autoriseerimine

Autoriseerimine sisselogimise ja parooliga on lihtne POST-i päring, mis tagastab juurdepääsuluba. See skeem pole midagi uut, kuid see sisaldub üldistusstandardis ja on soovitatav ainult siis, kui muud autoriseerimisvõimalused pole saadaval.
Näide
> POST /oauth/token HTTP/1.1 > Host: connect.mail.ru > Sisu tüüp: application/x-www-form-urlencoded > > grant_type=password&client_id=31337&client_secret=deadbeef [e-postiga kaitstud]&parool=qwerty< HTTP/1.1 200 OK < Content-Type: application/json < < { < "access_token":"SlAV32hkKG", < "token_type":"bearer", < "expires_in":86400, < "refresh_token":"8xLOxBtZp8", < }
Kirjeldus spetsifikatsioonis

Varasema volituse taastamine

Tavaliselt, juurdepääsuluba on piiratud säilivusajaga. See võib olla kasulik näiteks siis, kui see saadetakse kaudu avatud kanalid. Vältimaks kasutaja sundimist pärast aegumiskuupäeva sisselogimist juurdepääsuluba"ja kõigi ülaltoodud valikute puhul lisaks juurdepääsuluba"Võite uuesti tagasi tulla värskenda märk. Seda saab hankida juurdepääsuluba kasutades HTTP-päringut, mis sarnaneb sisselogimise ja parooli autoriseerimisega.
Näide
> POST /oauth/token HTTP/1.1 > Host: connect.mail.ru > Sisu tüüp: application/x-www-form-urlencoded > > grant_type=refresh_token&client_id=31337&client_secret=deadbeef&refresh_token=8xLOxBt< HTTP/1.1 200 OK < Content-Type: application/json < < { < "access_token":"Uu8oor1i", < "token_type":"bearer", < "expires_in":86400, < "refresh_token":"ohWo1ohr", < }

Populaarne protokoll, mis võimaldab sotsiaalne teenuseid omavahel integreerida ja annab ohutul viisil vahetada isiklik informatsioon. OAuth saab ühendada 2 teenust, millest igaühel on oma kasutajabaas – see on see, mida ma kasutan sel juhul Ma kutsun "sotsiaalseks". OAuthiga tööd alustades jääb esmamulje, et protokoll on väga keeruline ja üleliigne. Selles artiklis püüan selgitada OAuthi põhitõdesid inimkeel.

Ristvolituse näide

Läheme tagasi aastasse 2005 ja kujutame ette, et kirjutame sotsiaalvõrgustikku. Sellel on vorm kontaktide importimiseks aadressilt Gmaili raamatud. Millele juurde pääseda on vaja Gmaili kontaktid? Loomulikult sisselogimine ja parool kastist. Kuid kui palume neil need meie saidile sisestada, kahtlustab kasutaja, et midagi on valesti. Kus on garantii, et me sisestatud paroole serverisse ei salvesta? Seetõttu soovime, et parool sisestataks ainult Gmaili veebisaidil, ja pärast seda anti meile juurdepääs kontaktidele GMaili API kaudu sotsiaalvõrgustik(võib-olla ajutiselt). Lepime tingimustes kokku.
  • tarbija: tarbija; skript kontakti impordi vormi töötlemiseks sotsiaalvõrgustikus.
  • Teenusepakkuja: andmepakkuja; GMail, mis sisaldab Tarbijat huvitavaid aadressiraamatu andmeid.
  • kasutaja: kasutaja, kellel on konto nii Tarbija kui ka teenusepakkuja juures.
  • kaitstud ressurss: isiklikud andmed; kontaktid Gmaili aadressiraamatust (nt. Teenuse ressursid Pakkuja).
  • Pakkuja API: Gmaili API, mis võimaldab mis tahes skriptil saada kontakte GMaili aadressiraamatust.
OAuthi ülesanne- veenduge, et Kasutajal on võimalus töötada Tarbijateenuse kallal (sotsiaalvõrgustikus) Teenusepakkuja kaitstud andmetega (GMail), sisestades nende andmete jaoks parooli ainult Teenusepakkujasse ja jäädes Tarbija veebisaidile. Pole nii raske, eks?

Mille poolest OAuth erineb OpenID-st?

OAuthi nimetatakse sageli "robotiprotokolliks", mitte OpenID-le, "kasutajaprotokollile". Ärge ajage neid segadusse!
  1. OpenID on kiirendatud registreerimise protokoll. OpenID võimaldab kasutajal saada konto mis tahes teenusesse ilma parooli sisestamata, kui ta on juba kusagil mujal Internetis registreeritud. (Ja siis saate teenusesse siseneda ilma parooli sisestamata, olles "kusagil" volitatud.) Näiteks kui teil on Yandexi konto, saate selle abil "sisse logida" mis tahes teenusesse, mis toetab OpenID autoriseerimist.
  2. OAuth on protokoll volitatud juurdepääsuks kolmanda osapoole API-le. OAuth võimaldab tarbija skriptil saada piiratud API-juurdepääsu kolmanda osapoole teenusepakkuja andmetele, kui kasutaja annab selleks nõusoleku. Need. see on vahend API-le juurdepääsuks.

Politsei analoogia

Kujutage ette, et olete kriminaaluurimise osakonna liige, kes otsib 1973. aasta WebMoney vargusjuhtumi otsad. Leppime kokku tingimustes:
  • OAuthi tarbija: Kriminaaluurimine.
  • kasutaja: Kriminaaluurimise osakonna ametnik.
  • Teenusepakkuja: Kuritegude arhiivi kartoteek.
  1. OpenID: Kriminaaluurimise osakonna töötaja (kasutaja) tuleb kaardiregistrisse (teenusepakkuja), esitab sissepääsu juures volikirja (Authorization) ja sorteerib info otsimisel kaardid kohapeal.
  2. OAuth: Kriminaaluurimise osakonna töötaja (kasutaja) helistab kaardiindeksisse (teenusepakkuja) otse töölt (tarbija). Ta teatab oma perekonnanime; kui teda tunnustatakse (Authorization), küsib ta kõigi 1973. aasta kuritegude nimekirja (API kõne).
Nagu näete, on OpenID ja OAuth erinevad asjad. OpenID võimaldab juurdepääsu teatud ressurssidele otse kohapeal. OAuth võimaldab saada teavet kaugteenusest API kaudu.

Selle artikli ülevaade

Enne põhiosa juurde asumist vaatame täpselt, kuidas liigume.
  1. Mõelgem probleemidele, mis tekivad ristlubade "käsitsi" rakendamisel.
  2. Räägime sellest, mis on "rakendus" ja kes on Tarbija.
  3. Puudutame krüptograafia põhitõdesid.
  4. Tähistame demorakendust, mida selles artiklis kirjutame.
  5. Otsustame OAuthi testserveri kasuks, millega katsetame.
  6. Teeme läbi kõik OAuthi protokolli etapid ja esitame skriptiallikad.

Jalgrataste leiutamisest

Hea viis millestki aru saada on seda ise teha, astudes kõikidele teepealsetele rehadele. Nüüd leiutame ratta uuesti: proovime ette kujutada, kuidas lahendaksime tarbija ja teenusepakkuja vahelise suhtluse probleemi ilma standardsete protokollideta.

Esmalt kirjutame ise GMaili kontaktide importimise vormi: Järgmiseks palume GMaili arendajatel teha nii, et kui kasutaja navigeerib URI-le /auth.php, antakse talle autoriseerimisvorm (meie jalgrattamaailmas on GMail kirjutatud PHP-s). Pärast parooli edukat sisestamist tuleb kasutaja suunata saidile, mille URL on määratud parameetris retpath. Samuti tuleb URL-is edastada mõni salajane võti, mida saab juba kasutada Gmaili API-le juurdepääsuks.

Nii et pärast parooli sisestamist naaseb kasutaja meie saidile järgmisel aadressil: Ja me pöördume skripti /import.php kaudu GMaili API poole, edastame sellele võtme Y49xdN0Zo2B5v0RR ja laadime kontaktid: Noh, loeme nüüd reha (sest on liiga hilja konarusi kokku lugeda).

Esimene rake: tagastusaadressi retpath asendamine

Muidugi arvasite, et ründaja paneb esmalt oma saidile lingi ja sunnib teid sellel klõpsama. Selle tulemusena saab ta Gmaili poolt tagastatud salajase võtme ja seega ka teie kontaktid:

Teine reha: salajase võtme "pealtkuulamine".

Oletame, et me kaitsesime retpathi kuidagi ja nüüd saab see osutada ainult meie saidile. Aga probleem salaparameetriga jääb.Saladust saab piiluda tagant või pealt kuulata WiFi liiklust kuulates. Või on teie saidil kunagi XSS-i haavatavus, mis võimaldab teil salajase võtme "tõmmata". Kui see on seatud salajaseks, saab ründaja teie teavet lugeda aadressiraamat. Seega peate tagama saladuse pealtkuulamise eest (ideaaljuhul ärge edastage seda üldse URL-i kaudu).

Kolmas reha: liiga palju ümbersuunamisi

Kui iga API-kõne nõuab erinevat saladust, peame teenusepakkuja saidile korraldama nii palju ümbersuunamisi, kui meil on kõnesid. Koos intensiivse kasutades API-d see töötab väga aeglaselt ja ebamugavalt korras ...

Rake Four: halb tarbijatuvastus

Gmail tahab muidugi teada, kes selle API-t kasutab. Lubage juurdepääs mõnele saidile ja keelake juurdepääs teistele ... Seega tuleb kontaktide importimise vormis taotluse vormistamisel Tarbija (veebisait) teenusepakkujale (GMail) "esitada". Meie puhul täidab seda funktsiooni osaliselt retpath (selles olev saidi nimi), kuid nii mitte universaalne, sest API meetodite kutsumisel peab olema kaasatud ka "esitlus" mehhanism.

OAuthi asutamine

Tähelepanuväärne on see, et "veealuseid rehasid" on endiselt palju. Ma ei hakka neid siin kirjeldama, sest see reha asub Mariaani süvikus (sügavus, 10920 m). Haavatavuste kirjeldamiseks kuluks kümmekond lehekülge. Nii et hüppan kohe OAuthi kirjelduse juurde, kus kõik probleemid on juba lahendatud.

Rakendus = tarbija + API juurdepääs

OAuthiga töötamisel on oluline, et mõiste Tarbija ei piirduks ainult "veebisaidi" tähendusega. Tarbija on mõned rakendus, ja kus see asub, pole nii oluline. Näited tarbijatest alates päris elu: Aga ainult OAuthist putru keeta ei saa. Tõepoolest, kõik, mida OAuth pakub, on võimalus sisse logida kaugteenus(Teenusepakkuja) ja esitage API-le volitatud päringuid. Vahet pole, kuidas see API on paigutatud: see võib olla puhas SOAP, REST lähenemine jne. Peaasi, et iga API meetod aktsepteerib sisendiks spetsiaalseid parameetreid, mis edastatakse vastavalt OAuth-protokoll.

Token = võti + saladus

Üks OAuthi põhimõtetest on see, et taotlustes ei tohi avalikult edastada privaatvõtmeid (arutasime, miks ülaltoodud näites). Seetõttu toimib protokoll Tokeni kontseptsiooniga. Token on väga sarnane sisselogimise + parooli paariga: login - avatud info ja parool on teada ainult edastavale ja vastuvõtvale poolele. OAuthi osas nimetatakse sisselogimisanaloogiks võtmeks ja parooli analoogiks on Secret. Olukorda, kus saladust teavad ainult saatja ja saaja, mitte keegi teine, nimetatakse jagatud saladuseks.

Seega, kui Tarbija ja Pakkuja lepivad omavahel jagatud saladuses kuidagi kokku, saavad nad URL-is olevaid vastavaid võtmeid (Key) avalikult vahetada, kartmata, et nende võtmete pealtkuulamine on ohtlik. Aga kuidas kaitsta URL-i võtmega võltsimise eest?

Sõnum = dokument + digitaalallkiri

"Digiallkiri" kõlab hirmutavalt, kuid tegelikult on see üsna ilmne. Kui allkirjastate dokumendi pastakaga, kinnitate, et selle dokumendi on kirjutanud teie, mitte keegi teine. Teie allkiri on justkui "lisatud" dokumendile ja läheb sellega "ühes komplektis".

Samamoodi lisatakse mõnele andmeplokile digitaalallkiri, mis tõendab, et need andmed genereerinud isik ei esine teisena. Digiallkiri ei krüpteeri dokumenti, vaid tagab selle autentsuse! Allkirjastamine võimaldab kasutada sama jagatud saladust, mis on teada saajale ja saatjale, kuid mitte kellelegi teisele.

Kuidas see töötab? Laske meie $sharedSecret = 529AeGWg ja me sosistame selle vastuvõtvale poolele kõrva. Soovime edastada sõnumi "Minu telefon on 1234567" garanteeritud kaitsega ründajapoolse võltsimise eest.

  1. Tarbija lisab sõnumile digiallkirja, üldine vaade- $ülekanne = $sõnum . "-". md5($sõnum . $sharedSecret); // $transfer = "Minu telefon on 1234567" . "-". md5("Minu telefon on 1234567" . "529AeGWg")
  2. Teenusepakkuja võtab andmed, jagab need tagasi 2 osaks - $sõnum ja $signatuur - ning teeb täpselt sama toimingu: $signatureToMatch = md5($message . $sharedSecret); // $signatureToMatch = md5("Minu telefon on 1234567" . "529AeGWg"); Siis jääb üle vaid võrrelda saadud $signatureToMatch väärtust saadud $signature andmetes sisalduvaga ja teatada võltsist, kui väärtused ei ühtinud.

OAuthi toimimise demonstratsioon lihtsa rakendusega

OAuthi tunnetamiseks vajame kahte asja.
  1. Skript, mis rakendab kliendi pool protokolli. Kirjutasin just sellise väikese PHP skripti (zip arhiivi link). See on vidin, mida saab sisestada PHP saitidele.
  2. OAuthi testserver, kus saame katsetada. Selleks on mugav kasutada RuTvitit: seal on lehekülg http://rutvit.ru/apps/new, mis võimaldab lisada testrakendus 30 sekundi jooksul. (Muide, tagastatava URL-i vormil võib ära jätta - me edastame selle ikkagi testskriptist.)
Vaadates demoskripti koodi ja lugedes hiljem artiklis selgitusi, saate protokolli üksikasjadest aru.

Saate selle vidina manustada mis tahes PHP saidile, kopeerides lihtsalt selle koodi ja kohandades paigutust. Kuvatakse kõik RuTwiti teenuse säutsud, mis on märgitud määratud räsisildiga, samuti on võimalik lisada uusi säutse (siin tuleb mängu OAuth). Vidin kasutab RuTwit API ja OAuthi autoriseerimist, mis, muide, on samad, mis Twitteri API standard. Selle skripti saate käivitada oma testserveris. Selleks peate tegema kolm sammu:

  1. Laadige skriptikood alla ja juurutage see veebiserveri mis tahes mugavasse kataloogi.
  2. Registreerige OAuthi serveris uus testrakendus.
  3. Pärast rakenduse registreerimist asendage skriptis parameetrid OA_CONSUMER_KEY ja OA_CONSUMER_SECRET serverilt saadud väärtustega.

Rakenduse registreerimine ja seaded

Räägime sellest, kust rakendused tulevad ja kuidas teenusepakkuja nendest teada saab. Kõik on üsna lihtne: teenusepakkujal on spetsiaalne registreerimisvorm, mida saab kasutada igaüks. Siin on näide sellisest vormist:


Pärast rakenduse registreerimist antakse teile 5 parameetrit, mis on vajalikud OAuthiga töötamiseks. Need võivad välja näha järgmiselt:


Siin on Consumer Key ja Consumer Secret teie rakenduse omamoodi "sisselogimine + parool" (kas mäletate ülaltoodud vestlust žetoonide kohta? see on vaid üks neist). Tuletan meelde, et tarbijasaladus on jagatud saladus, mida teavad ainult saatja ja saaja, kuid mitte keegi teine. Ülejäänud 3 väärtust määravad teenuse URL-id, mille tähendust me nüüd kaalume.

OAuth = Too taotluse luba + ümbersuunamine autoriseerimisse + too juurdepääsuluba + kõne API

GMaili näites kasutasime kahte tüüpi kaugkõnesid: a) suunamine läbi brauseri; b) API-le juurdepääs skripti kaudu.

Ja avastasime mitmeid turvaprobleeme, mis viitab sellele, et väljakutseid peaks olema rohkem. Nii juhtub OAuthis: tarbijaskriptist lisatakse teenusepakkujale rohkem vahepealseid päringuid, mis töötavad žetoonidega. Vaatame neid.

  1. Vormi esitamise töötlemine. See ei ole osa OAuthist, vaid osa meie rakendusest. Enne teenusepakkuja API-le juurde pääsemist peame saama kasutajalt selle toimingu korralduse. Siin on näide sellisest tellimusest:
  2. Too päringu luba (sisemine taotlus).
    • Tarbijaskript kutsub Taotlege loa URL-i Pakkuja: näiteks api.rutvit.ru/oauth/request_token . Päring edastab Tarbija võtme - "rakenduse sisselogimine" ja päring ise allkirjastatakse tarbijasaladuse - "rakenduse parooli" abil, mis kaitseb seda võltsimise eest.
    • Vastuseks loob ja tagastab teenusepakkuja prügiga täidetud märgi, mida nimetatakse päringumärgiks. Meil on seda ikkagi vaja, seega peame selle kuhugi salvestama – näiteks seansi muutujasse $S_REQUEST_TOK.
  3. Suuna ümber autoriseerimisse (brauseri ümbersuunamise kaudu). Nüüd on meie rakendusel ainulaadne päringumärk. Selle märgi kasutamiseks on vaja hankida kasutajalt luba, s.o. Küsi temalt autoriseerida Request Token.
    • Tarbija suunab brauseri konkreetsele lehele Autoriseeri URL Pakkuja: näiteks api.rutvit.ru/oauth/authorize . Request Token Key edastatakse parameetrites.
    • Pakkuja kuvab oma kasutajale autoriseerimisvormi ja kui tal on volitus, suunab ta brauseri tagasi. Kus täpselt? Ja me määrame selle parameetris oauth_callback.
  4. Hankige juurdepääsuluba (sisemine taotlus). Niisiis on brauser pärast mitmeid ümbersuunamisi meie rakendusse naasnud. See tähendab, et Pakkuja autoriseerimine õnnestus ja päringumärgil on lubatud töötada. Siiski on OAuthis turvalisuse huvides igal loal oma rangelt piiratud eesmärk. Näiteks kasutatakse päringuluba ainult kasutajalt kinnituse saamiseks ja mitte midagi muud. Ressurssidele juurdepääsuks peame hankima uue märgi – Access Token – või, nagu öeldakse, "vahetusluba juurdepääsulubaks".
    • Tarbija viitab Juurdepääsuloa URL- näiteks api.rutvit.ru/oauth/access_token , - ja palub anda talle taotlusloa asemel juurdepääsuluba. Taotlus on allkirjastatud digitaalne allkiri põhineb päringumärgi saladusel.
    • Pakkuja loob ja tagastab prügiga täidetud juurdepääsuloa. Samuti märgib see oma tabelites, et sellele juurdepääsumärgile on API-juurdepääs lubatud. Meie rakendus peab säilitama juurdepääsuluba, kui see hakkab tulevikus API-d kasutama.
  5. Call API (sisemine päring). Noh, nüüd on meil juurdepääsuluba ja saame selle võtme API-meetodite kutsumisel edasi anda.
    • Tarbija genereerib päringu Pakkuja API-le (näiteks kasutades POST päringut vastavalt REST ideoloogiale). Taotlus edastab juurdepääsuloa võtme ja see allkirjastatakse selle loa jagatud saladuse abil.
    • Pakkuja haldab API kõnet ja tagastab andmed rakendusele.

Skripti lõpp: vidina väljund

Skripti lõpp peaks olema selge ja ilma üksikasjalike selgitusteta.
Nimekiri 14: skripti lõpp: vidina väljund
// lõpptäht ) ) // Hangi kõik saadaolevad säutsud. $tekst = file_get_contents("http://api.rutvit.ru/search.xml?rpp=5&q=" . urlencode("#" . TAG)); $TWEETS = new SimpleXMLElement($tekst); // Ümberkodeerimise ja tsiteerimisega sõnumi kuvamise otsetee. funktsioon e($tekst, $tsitaat = 1) ( $tekst = iconv("utf-8", kodeering, $tekst); kaja $tsitaat? htmlspecialchars($text) : $tekst; ) ?>
olek $tweetina) (?>
user->screen_name)?>: text_formatted, 0)?>
?action=form_is_sent" style="margin: 1em 0 0 0">

Kasulikud lingid OAuthis

  • rutvit
Lisa märksõnu

Selle tulemusel pääseb AdWords API-d kasutav kliendirakendus AdWordsi kontole juurde ilma kasutaja e-posti aadressi ja paroolita.

Looge OAuth2 mandaadid

OAuth2 mandaadi loomiseks toimige järgmiselt.

Rakenduse tüübi määratlus

Esiteks peate määratlema rakenduse tüüp mida soovite luua. AdWords API-s on kahte tüüpi rakendusi.

  • installitav rakendus(soovitatav);
  • veebirakendus.

Vajaliku rakenduse tüübi määramiseks kasutage allolevat tabelit.

Mida valida Olukord
Installitud rakendus(soovitatav)
  • Saate hallata kõiki oma AdWordsi kontosid ühe ülataseme haldurikontoga.
  • Kas olete alles alustamas või soovite kiiresti alustada.
  • Teie rakendus töötab ühe mitme kasutajaga AdWordsi kontoga.
Veebirakendus
  • Soovite autentida, et anda erinevatele kasutajatele erinevad juurdepääsuõigused oma AdWordsi konto andmetele.
  • Peate looma mitu mandaadikomplekti, näiteks kolmanda osapoole kontode haldamiseks.
  • Teie rakendus nõuab tagasihelistamise URL-e, mida teie installitud rakendused ei toeta.
Tähelepanu!Isegi kui arendate veebirakendust, saate ikkagi valida, millist rakendust installida. Peamine erinevus seisneb selles, kas peate pärast märgi väljastamist tagasi helistama. Näiteks kui kasutate kõigi AdWordsi kontode haldamiseks ühte tipptasemel haldurikontot, peate installitava rakenduse registreerima, isegi kui kliendirakendus on võrgus saadaval. Märge.arutatakse allpool. Kui te ei vaja teenusekonto funktsioone, soovitame tungivalt kasutada installitud või veebirakenduse autoriseerimisprotsessi.

Looge kliendi ID ja pääsukood

Kui olete oma rakenduse tüübi tuvastanud, klõpsake alloleval sobival vahekaardil ja järgige kliendi ID ja pääsukoodi loomiseks juhiseid.

Installitud rakendus

  1. avatud
  2. Loo projekt Loo.
  3. Loo mandaadid, ja siis - OAuthi kliendi ID.
  4. Salvesta
  5. Peatükis Rakenduse tüüp vali Muud tüübid ja esitage vajalik teave.
  6. Klõpsake Loo.
  7. identifikaator Ja Salajane võti
Veebirakendus
  1. avatud
  2. Valige projektide rippmenüüst Loo projekt, seejärel määrake projekti nimi ja vajadusel muutke selle ID-d, seejärel klõpsake nuppu Loo.
  3. Valige lehel Mandaadid Loo mandaadid, ja siis - OAuthi kliendi ID.
  4. Teilt võidakse küsida toote nime. Sel juhul vajutage Juurdepääsutaotluse akna kohandamine, sisestage nõutud teave ja klõpsake nuppu Salvesta Mandaatide ekraanile naasmiseks.
  5. Peatükis Rakenduse tüüp vali Veebirakendus. Järgige juhiseid JavaScripti allikate ja/või ümbersuunamise URI-de esitamiseks.
  6. Klõpsake Loo.
  7. Kopeerige kuvataval lehel identifikaator Ja Salajane võti klient – ​​vajate neid klienditeegi seadistamisel.

Järgige allolevaid juhiseid, et konfigureerida OAuth2 mandaatide kasutamine oma keele klienditeegiga.

Märge.Kui otsustate mõnda meie klienditeeke mitte kasutada, peate protsessid ise või enda jaoks rakendama.

OAuth2 mänguväljak

Alternatiivne viis OAuth2 mandaatide loomiseks on kasutada OAuth2 mänguväljak. Koos Google API konsooliga võimaldab see süsteem teil ise OAuth2 märke luua.

OAuth2 Playgroundi süsteem on mõeldud neile kasutajatele, kes vajavad juurdepääsu ainult kontodele üks haldurikonto või AdWordsi kasutaja. Kui peate küsima mitme kasutaja mandaate, on parem kasutada ülalkirjeldatud klienditeeke.

Seadistamine

Hoiatus.Kasutada OAuth2 mänguväljak, peate looma kliendi ID jaoks. See ainus rakenduse tüüp, mis töötab OAuth2 Playgroundiga. Lisateavet leiate ülaltoodud jaotisest.

Kuidas saada kliendi ID ja salavõti

  1. avatud
  2. Valige rippmenüüst olemasolev projekt või looge uus.
  3. Valige lehel Mandaadid Loo mandaadid, ja siis - OAuthi kliendi ID.
  4. Peatükis Rakenduse tüüp vali Veebirakendus.
  5. Lisage jaotisesse järgmine rida: https://site/oauthplayground
  6. Klõpsake Loo.
  7. Kirjuta üles identifikaator Ja Salajane võti kuvataval lehel loetletud kliente. Te vajate neid järgmises etapis.

Kuidas žetoone luua

Hoiatus.Google'i konto, millele olete oma brauseris sisse logitud, määrab, millistele AdWordsi kontodele saate loodud OAuth2 mandaatide abil juurde pääseda. Võib-olla on kõige parem teha need toimingud inkognito režiimis või ilma oma Google'i kontole sisse logimata. Tõenäoliselt peate kasutama mandaate, mis ei ole seotud kontoga, millel olite kliendi ID ja salajase võtme saamisel.

Kuidas eemaldada OAuth2 Playground kliendi ID-st

Sest sul juba on värskenda märk, ei pea te enam lubatud ümbersuunamise URI-na kasutama OAuth2 Playgroundi. Selle süsteemi loendist eemaldamiseks toimige järgmiselt.

  1. Minema .
  2. Valige rippmenüüst oma projekt.
  3. Valige lehel Mandaadid kliendi ID nimi.
  4. Eemaldage väljalt https://site/oauthplayground Lubatud ümbersuunamise URI-d. Pange tähele, et peate vähemalt lahkuma üksÜmbersuunamise URI.
  5. Klõpsake Salvesta.

Nii et teil on OAuthi mandaat. Nüüd saate AdWords API-le päringuid teha ja seda vajaliku klienditeegi jaoks kasutada.

OAuth2 teenuse kontod

Selles jaotises kirjeldatakse, kuidas teenusekontode abil AdWords API-le juurde pääseda.

Teenusekonto on konto, mis kuulub rakendusele, mitte üksikule lõppkasutajale. Teenusekontod pakuvad suhtlust veebirakenduse ja Google'i teenuse vahel. Teie rakendus helistab API-le teenusekonto nimel ilma kasutaja otsese kaasamiseta.

AdWords API võimaldab juurdepääsu teenusekontole G Suite'i domeenide kaudu.

Teenusekonto rakendab OAuth2 protsessi, mis kasutab kasutaja volitamise asemel võtmefaili, mis on saadaval ainult teie rakendusele.

Teenusekontode kasutamine annab kaks olulist eelist:

  • Rakenduse juurdepääsu lubamine Google API-le toimub seadistamisetapis. See väldib kasutaja sekkumist või märkide vahemällu salvestamist teistes OAuth2 voogudes.
  • Vajadusel teiste kasutajate esinemine rakenduses toimub OAuth2 kinnitusprotsessi osana.
Märge. Kui te ei kasuta domeeni erifunktsioone, näiteks kellegi teisena esinemine, on väga soovitatav kasutada protsessi jaoks . OAuth2 installitavate ja veebirakenduste protsessides on kasutaja osalemine kontole juurdepääsu andmise ajal nõutav ainult üks kord.

Alternatiiv teeninduskontodele

Teenusekontosid kasutatakse laialdaselt programmilise juurdepääsu pakkumiseks API-dele OAuth2-protokolli kaudu ilma kasutaja sekkumiseta.

Nende kontode seadistamine AdWords API-ga töötamiseks pole aga lihtne. Lihtsam alternatiiv on püsiva värskendusmärgiga. See lähenemisviis võimaldab rakendusel igal ajal taotleda uusi juurdepääsulube.

Selle protsessi osana peate ülalkirjeldatud viisil seadistama rakenduse autoriseerimise klienditeegi kaudu. Seda tuleb teha ainult üks kord, kuna Google OAuth2 värskendusmärgid ei aegu kunagi.

Nõuded

  • Teile kuuluv G Suite'i domeen, nt mydomain.com või mybusiness.com.
  • AdWords API arendaja tunnus ja eelistatavalt testkonto.
  • kasutatava keele jaoks.

Kliendikonto juurdepääsu konfigureerimine

Esiteks peate Google API konsoolis looma teenusekonto võtme.

  1. Logige sisse oma G Suite'i kontole, avage .
  2. Valige projektide rippmenüüst Loo projekt, seejärel sisestage nõutav teave ja klõpsake nuppu Loo. Uus projekt kuvatakse aktiivses loendis.
  3. Valige vasakus ülanurgas olevast menüüst IAM ja administreerimine, ja siis - Teenusekontod vasakpoolses menüüs.
  4. Klõpsake Looge teenusekonto lehe ülaosas.
  5. Määrake teenusekonto nimi.
  6. Märkeruut Looge uus privaatvõti ja valige JSON-võtme tüüp.
  7. Märkeruut Lubage G Suite'i domeenis andmetele juurdepääsu delegeerimine ja sisestage juurdepääsutaotluse akna tootenimi.
  8. Klõpsake Loo. Algab JSON-võtmefaili allalaadimine. Salvestage fail kindlasse kohta, kuhu pääsete juurde ainult teil.
  9. Lehel Teenusekontod kuvatakse uus teenusekonto.
Märge. Kuna kasutajate esinemist saab kontrollida ainult domeeni tasemel on teil vaja teenusekontode ja Google OAuth2 teenustega kinnitamisprotsessi kasutamiseks oma domeeni, mis on registreeritud G Suite'is. Kõik domeeni kasutajad, kes kasutavad vastavate õigustega teenusekontot, võivad esineda mis tahes domeeni kasutajana.

Turvaprobleemid

Kuna G Suite'i hallatakse domeeni tasemel, peate turvaliselt kaitsma võtmefaili, mis võimaldab volitatud kontodel Google'i teenustele juurde pääseda. See on eriti oluline, kuna pakume teenusekontot, mis võimaldab esineda domeeni mis tahes kasutajana.

Samuti on soovitatav anda igale teenusekontole juurdepääs ainult ühele Google API-le. Selleks kasutage välja ulatus, mida kirjeldatakse järgmises jaotises. See ennetav meede võimaldab piirata andmete hulka, millele võtmefaili kahjustamise korral on volitamata juurdepääs avatud.

Kuidas pakkuda kellegi teisena esinemise võimalusi

Teenusekontole kellegi teisena esinemise võimaluste andmiseks toimige järgmiselt.

Nüüd pääsete oma AdWordsi kontole juurde teenusekonto kaudu, mis on osa OAuth2 kinnitamisprotsessist.

Kliendi raamatukogu seadistamine

Klienditeegi seadistamise juhiste saamiseks valige keel.

Märge.Kui otsustate mõnda meie klienditeeke mitte kasutada, peate protsessi ise rakendama.

OAuth2 taotluste optimeerimine

Kui teie rakendus ei kasuta mandaadi jagamist, võib see oluliselt suurendada Google'ile saadetavate päringute arvu. Selle tulemusena võivad meie serverid kehtestada sellisele rakendusele piiranguid, mis aeglustab selle jõudlust.

Selles jaotises kirjeldatakse, kuidas optimeerida OAuth2 mandaadi haldust, et teie rakendus saaks AdWords API-ga tõhusamalt suhelda.

Tähelepanu!Termini all volikirjad see viitab kogu OAuth2 mandaadi atribuutide komplektile, sealhulgas juurdepääsulubale ja selle aegumiskuupäevale.

Mandaatide jaotamise strateegiad

Mandaatide jaotamine API taotluste vahel parandab jõudlust ning väldib piirangute rikkumistest tulenevaid üldkulusid ja vigu.

Mandaatide eraldamise strateegia sõltub rakenduse struktuurist.

Mitme lõimega rakendustes peab iga lõime seanss kasutama samu mandaate.

Mitme protsessiga ja hajutatud rakendustes tuleb mandaatide protsesside vahel edastamiseks rakendada teatud infrastruktuuri. Lisaks tuleb vältida niidi blokeerimist ja võistlustingimusi.

Rakenduses, mis on nii mitme protsessi/hajutatud kui ka mitme lõimega, peab iga protsess ühendama mõlemad strateegiad.

Järgmised on strateegiad ühe AdWordsi konto, näiteks hierarhia tipphalduri konto autentimiseks.

Seejärel kirjeldatakse, kuidas neid strateegiaid .

Mitme lõimega rakendused

Mitme lõimega rakendustes peavad volikirjad olema erinevate lõimede jaoks kättesaadavad. Võistlustingimuste vältimiseks tuleks mandaadi värskendamine toimuda sünkroonselt.

See diagramm näitab lõime, mis esitavad AdWords API-le taotlusi käitusajal. Kasutatakse jagatud seansside (kasutajate) kogumit. Pange tähele, et iga seanss peab kasutama sama mandaadiobjekti. Vastuseks igale API päringule saab lõime vastava seansi (kasutaja). Kui juurdepääsuluba on vaja värskendada, tuleb seda teha sünkroonselt, et vältida võistlustingimusi. Teisisõnu peab mandaadiobjekt olema lõimekindel.

Klienditeegid hõlbustavad mandaatide edastamist lõimede vahel. Igal klienditeegil on seansi (või kasutaja) objekt koos mandaatidega, mida ta oma elutsükli jooksul uuesti kasutab. Mandaatide kasutamiseks seansside lõikes peate need iga seansi loomisel rakendama. Kõikides klienditeekides on mandaadid lõimekindel objekt, mida sünkroonselt värskendatakse, kui juurdepääsuluba aegub.

Näiteks Java klienditeegis peate looma ühekordse mandaadiklassi ja kasutama seda kõigi seansside jaoks.

Mitme protsessiga ja hajutatud rakendused

Mitme protsessiga ja hajutatud rakendustes tuleb mandaatide eraldamine toimuda pidevalt. Vältimaks võistlusolukorda, kus mitu serverit üritavad samaaegselt mandaate värskendada (mis toob kaasa liiga suure arvu värskendustaotlusi), soovitame teil värskendamine sundida ja edastada värskendatud mandaadid kõikidele protsessidele ja serveritele.

Näiteks võib üks ülesanne või teenus uuendada mandaate perioodiliselt ja edastada need andmesalve, kus neid kasutavad erinevad serverid.

Diagramm näitab mandaatide perioodilist värskendamist ja nende omaduste kirjutamist andmesalve. Seejärel saavad kõik serverid mandaadid enne API-le päringu esitamist.

Värskenda ülesannet

Värskendusülesanne värskendab regulaarselt mandaate ja saadab need andmesalve. See ülesanne ei tohiks oodata, kuni praegused mandaadid aeguvad, kuna see põhjustab kehtivate mandaatide puudumise tõttu mõneks ajaks rakenduse ebaõnnestumise.

Parim alternatiiv on perioodiline sundvärskendus, mis asendab andmesalves olevad mandaadid iga kord uutega. Värskendusülesanne peaks käima palju enne praeguste mandaatide aegumist, et mööduva vea ilmnemisel oleks piisavalt aega. Alustamiseks käivitage värskendus iga 15 minuti järel.

Märge.Kui mandaadi juurdepääsuluba aegub API päringu töötlemise ajal, õnnestub taotlus siiski. Näiteks kui olete loonud kauakestva päringu ja juurdepääsuks on jäänud vähem kui minut, tagastatakse ikkagi tulemused.

Andmesalv

Andmesalve kasutatakse erinevate protsesside ja serverite mandaatide edastamiseks.

Selleks saate kasutada olemasolevat andmesalvesti või luua spetsiaalse, mille kaudu serverid saavad mandaadid. Võimalikud lahendused hõlmavad vahemäluservereid (nt Memcached või Infinispan) ja NoSQL-i andmesalve (nt MongoDB).

Andmelao peamine eesmärk on pakkuda usaldusväärset liidest kõigile API-le ligi pääsevatele serveritele. Selle tööd tuleb andmete kiireks lugemiseks optimeerida: serverid ja protsessid loevad mandaate sagedamini kui neid värskendatakse.

Pidage meeles, et mandaate tuleb turvaliselt säilitada.

Mandaatide salvestamisel peate salvestama atribuudid expiry_time (praegune aeg + aegumiskuupäev) ja refresh_token koos atribuudiga access_token. Atribuut expiry_time (token expiration) arvutatakse järgmise valemi abil: juurdepääsu_tokeni uuendamise taotluse aeg + aegumiskuupäeva aeg (märgi aegumiskuupäev).

Serveri bassein

Iga basseini server saab enne päringu saatmist andmesalvest uusimad mandaadid. Niikaua kui värskendusülesanne töötab edukalt, kehtivad mandaadid. Kui aga värskendusülesanne või andmesalve ebaõnnestub, peab olema varumehhanism.

Kui server või protsess ei saa andmesalvest mandaate hankida või kui mandaadid on aegunud, peab server oma mandaate värskendama, et rakendus jätkaks API-ga töötamist kuni probleemi lahendamiseni.

Mitme lõimega protsessides peate mandaatide jaotamiseks lõimede vahel kasutama sama strateegiat.

Mitme konto autentimine

AdWordsi haldurikonto jaoks loodud mandaate saab kasutada kõikidele alamkontodele juurdepääsuks. Ühe haldurikontoga kasutajad peavad tavaliselt looma ülataseme haldurikonto mandaadid, et volitada rakendus kõigi oma AdWordsi alamkontode jaoks.

Muudel juhtudel vajab rakendus juurdepääsu AdWordsi kontodele, mis pole haldurikonto hierarhias omavahel seotud. Sellises olukorras peate looma ja säilitama mitu mandaadi erinevate kontode jaoks, näiteks iga AdWordsi kliendikonto jaoks, millele teil on juurdepääs, või iga sõltumatu hierarhia kõrgema taseme haldurikonto jaoks.

Neid strateegiaid saate järgida minimaalsete muudatustega rakenduste ja rakenduste jaoks. Jagatud salvestusruumi kasutamisel tuleb mandaadid indekseerida konto ID-ga customerId, et tagada mandaatide seostamine nõutava kontoga. Lisaks peaks värskendusülesanne neid õigeaegselt värskendama. Pärast uue konto ühendamist peate võib-olla selle käivitama.

Lõpuks, mitme lõimega rakendustes peaksite mandaadiobjekti levitama ainult nende lõimede vahel, mis töötavad sellel kontol, millega see on seotud.

Kuidas OAuth2 töötab

Märge. AdWords API ei toeta veel samaaegset sisselogimist andmepäringuga (hübriid) ega volituste delegeerimist domeeni tasemel (2LO).

Ulatus

Juurdepääsuluba võib anda andmetele erineval määral juurdepääsu. Muutuva ulatuse parameeter määrab ressursside ja toimingute komplekti, millele luba annab juurdepääsu. Juurdepääsuluba taotledes saadab teie rakendus ulatuse parameetrile ühe või mitu väärtust.

Allpool on AdWords API praegune ja pärand ulatus.

võrguühenduseta juurdepääs

AdWords API-d kasutav kliendirakendus taotleb tavaliselt võrguühenduseta juurdepääsu. See võib juhtuda, kui rakendus peab käivitama paketttöid, kui kasutaja sirvib teie saiti ilma Interneti-ühenduseta.

Installitud rakendused kasutavad vaikimisi võrguühenduseta juurdepääsu.

HTTP päringu päis

Iga AdWords API serveri päringu HTTP-päis peab sisaldama järgmist vormi:

Volitus: kandja THE_ACCESS_TOKEN

POST … HTTP/1.1 Host: … Autoriseerimine: kandja 1/fFAGRNJru1FTz70BzhT3Zg sisu tüüp: text/xml;charset=UTF-8 sisu pikkus: …

Juurdepääsumärgid ja värskendused

Enamikul juhtudel tuleb värskendusluba salvestada turvalisse kohta, kuna seda võib hiljem vaja minna. Lisateavet juurdepääsulubade taotlemise ja värskendamise kohta leiate järgmistest juhenditest.

Millal juurdepääsuluba aegub?

Juurdepääsuloal on aegumiskuupäev, mis sõltub expires_in väärtusest. Aegunud juurdepääsuluba saab värskendada värskendusmärgiga, kuid meie klienditeegid teevad seda automaatselt.

Kui pole märgitud teisiti, on selle lehe sisu litsentsitud Creative Commonsi Attribution 3.0 litsentsi alusel ja koodinäidised on litsentsitud Apache 2.0 litsentsi alusel. Üksikasju vaadake meie . Java on Oracle'i ja/või selle sidusettevõtete registreeritud kaubamärk.

Värskendatud 24. septembril 2018