Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • OS
  • OAuth VKontakte: përdorni për përfitime personale. OAuth: përshkrimi i protokollit në një gjuhë të thjeshtë dhe të kuptueshme

OAuth VKontakte: përdorni për përfitime personale. OAuth: përshkrimi i protokollit në një gjuhë të thjeshtë dhe të kuptueshme


  1. Hapja e shfletuesit të integruar me faqen e autorizimit
  2. Përdoruesit i kërkohet të konfirmojë dhënien e të drejtave
  3. Nëse përdoruesi pajtohet, shfletuesi do të ridrejtojë në faqen cung në fragment (pas #) URL-ja e të cilit është shtuar shenjë e hyrjes
  4. Aplikacioni kap ridrejtimin dhe merr shenjë e hyrjes nga adresa e faqes
Ky opsion kërkon ngritjen e një dritareje të shfletuesit në aplikacion, por nuk kërkon një anë të serverit dhe një thirrje shtesë server-me-server për shkëmbim Kodi i autorizimitshenjë e hyrjes.
Shembull
Hapni një shfletues me një faqe autorizimi:
> GET /oauth/authorize?response_type=token&client_id=464119 HTTP/1.1 > Pritësi: connect.mail.ru

Pasi përdoruesi i jep të drejtat, ndodh një ridrejtim në faqen standarde të cungut, për Mail.Ru kjo është 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

Aplikacioni duhet të përgjojë ridrejtimin e fundit, të marrë nga adresa hyrje_token dhe ta përdorin atë për të hyrë në burimet e mbrojtura.

Autorizimi i hyrjes dhe fjalëkalimit

Autorizimi me hyrje dhe fjalëkalim është një kërkesë e thjeshtë POST, e cila kthehet shenjë e hyrjes. Kjo skemë nuk është asgjë e re, por përfshihet në standardin për përgjithësi dhe rekomandohet vetëm kur opsionet e tjera të autorizimit nuk janë të disponueshme.
Shembull
> POST /oauth/token HTTP/1.1 > Pritësi: connect.mail.ru > Lloji i përmbajtjes: aplikacioni/x-www-form-urlencoded > > grant_ty [email i mbrojtur] 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", < }
Përshkrimi në specifikim

Rivendosja e një autorizimi të mëparshëm

Zakonisht, shenjë e hyrjes ka një jetëgjatësi të kufizuar. Kjo mund të jetë e dobishme, për shembull, nëse transmetohet përmes kanaleve të hapura. Për të shmangur detyrimin e përdoruesit të identifikohet pas datës së skadimit shenjë e hyrjes"dhe, në të gjitha opsionet e mësipërme, përveç shenjë e hyrjes"Mund të ktheheni përsëri shenjë rifreskimi. Mund të merret shenjë e hyrjes duke përdorur një kërkesë HTTP, e ngjashme me autorizimin e hyrjes dhe fjalëkalimit.
Shembull
> POST /oauth/token HTTP/1.1 > Pritësi: connect.mail.ru > Lloji i përmbajtjes: aplikacion/x-www-form-urlencoded > > grant_type=refresh_token&client_id=31337&client_secret=deadbeef&refresh_token=8x8LOxBt< HTTP/1.1 200 OK < Content-Type: application/json < < { < "access_token":"Uu8oor1i", < "token_type":"bearer", < "expires_in":86400, < "refresh_token":"ohWo1ohr", < }

Një protokoll popullor që lejon sociale shërbime për t'u integruar me njëri-tjetrin dhe ofron një mënyrë të sigurt për të shkëmbyer informacione personale. OAuth mund të lidhë 2 shërbime së bashku, secila prej të cilave ka bazën e vet të përdoruesve - këto janë ato që unë i quaj "sociale" në këtë rast. Kur filloni të punoni me OAuth, përshtypja e parë është se protokolli është shumë i ndërlikuar dhe i tepërt. Në këtë artikull, unë do të përpiqem të shpjegoj bazat e OAuth në terma njerëzorë.

Shembull i autorizimit të kryqëzuar

Le të kthehemi në vitin 2005 dhe të imagjinojmë se po shkruajmë një rrjet social. Ka një formë për importimin e kontakteve nga libri i adresave të GMail. Çfarë ju nevojitet për të hyrë në kontaktet tuaja GMail? Sigurisht, identifikimi dhe fjalëkalimi nga kutia. Por nëse i kërkojmë që t'i fusin në faqen tonë, përdoruesi do të dyshojë se diçka nuk është në rregull. Ku është garancia që nuk i ruajmë fjalëkalimet e futura në server? Prandaj, ne duam që të futet fjalëkalimi vetëm në faqen e internetit të GMail, dhe pas kësaj qasja në kontakte përmes API-së GMail iu dha rrjetit tonë social (ndoshta përkohësisht). Le të biem dakord për kushtet.
  • konsumatori: konsumatori; skript për përpunimin e formularit të importimit të kontaktit në një rrjet social.
  • Ofrues shërbimi: ofruesi i të dhënave; GMail që përmban të dhëna të librit të adresave me interes për Konsumatorin.
  • përdorues: Një përdorues që ka një llogari si me Konsumatorin ashtu edhe me Ofruesin e Shërbimit.
  • burim i mbrojtur: te dhena Personale; kontaktet nga libri i adresave në GMail (d.m.th. burimet e Ofruesit të Shërbimit).
  • API-ja e ofruesit: Një API GMail që lejon çdo skript të marrë kontakte nga libri i adresave të GMail.
Detyra OAuth- sigurohuni që Përdoruesi të ketë mundësinë të punojë në shërbimin e konsumatorit (në rrjetin social) me të dhënat e mbrojtura të Ofruesit të Shërbimit (GMail), duke futur fjalëkalimin për këto të dhëna ekskluzivisht në Ofruesin e Shërbimit dhe duke mbetur në faqen e internetit të Konsumatorit . Jo aq e vështirë, apo jo?

Si ndryshon OAuth nga OpenID?

OAuth shpesh referohet si një "protokoll robotik", në krahasim me OpenID, një "protokoll përdoruesi". Mos i ngatërroni!
  1. OpenID është një protokoll për regjistrim të përshpejtuar. OpenID lejon përdoruesin të marrë një llogari në çdo shërbim pa futur një fjalëkalim nëse ai tashmë është i regjistruar diku tjetër në internet. (Dhe më pas mund të hyni në shërbim pa futur një fjalëkalim, duke u autorizuar "diku".) Për shembull, nëse keni një llogari Yandex, mund ta përdorni atë për të "hyrë" në çdo shërbim që mbështet autorizimin OpenID.
  2. OAuth është një protokoll për qasje të autorizuar në një API të palës së tretë. OAuth lejon që skripti i konsumatorit të fitojë akses të kufizuar në API në të dhënat e një Ofruesi të Shërbimit të palëve të treta nëse Përdoruesi jep miratimin. ato. është një mjet për të hyrë në API.

Analogjia e policisë

Imagjinoni që ju jeni një anëtar i Departamentit të Hetimit Kriminal që kërkoni përfundime në një rast vjedhjeje të WebMoney të vitit 1973. Le të biem dakord për kushtet:
  • Konsumatori i OAuth: Hetimi penal.
  • përdorues: Oficer i Departamentit të Hetimeve Kriminale.
  • Ofrues shërbimi: Kartela e arkivit të krimeve.
  1. OpenID: një punonjës i Departamentit të Hetimit Kriminal (Përdoruesi) vjen në Indeksin e Kartës (Furnizuesi i Shërbimit), paraqet një kredencial (Autorizim) në hyrje dhe i rendit kartat në vend në kërkim të informacionit.
  2. OAuth: një punonjës i Departamentit të Hetimit Kriminal (Përdoruesi) telefonon Indeksin e Kartës (Ofruesi i Shërbimit) direkt nga puna (Konsumatori). Ai raporton mbiemrin e tij; nëse njihet (Autorizimi), kërkon listën e të gjitha krimeve për vitin 1973 (thirrje API).
Siç mund ta shihni, OpenID dhe OAuth janë gjëra të ndryshme. OpenID ju lejon të aksesoni burime të caktuara menjëherë. OAuth ofron marrjen e disa informacioneve nga një shërbim në distancë nëpërmjet një API.

Përmbledhje e këtij artikulli

Para se të kalojmë në pjesën kryesore, le të shohim saktësisht se si do të lëvizim.
  1. Le të shqyrtojmë problemet që lindin gjatë zbatimit "manual" të ndërautorizimit.
  2. Le të flasim se çfarë është një "aplikacion" dhe kush është një Konsumator.
  3. Le të prekim bazat e kriptografisë.
  4. Le të tregojmë aplikacionin demo që do të shkruajmë në këtë artikull.
  5. Le të vendosim për një server testues OAuth në të cilin do të eksperimentojmë.
  6. Le të kalojmë nëpër të gjitha hapat e protokollit OAuth dhe të japim burimet e skriptit.

Rreth shpikjes së biçikletave

Një mënyrë e mirë për të kuptuar diçka është ta bësh vetë, duke shkelur të gjitha raketat gjatë rrugës. Tani do të rishpikim rrotën: do të përpiqemi të imagjinojmë se si do ta zgjidhnim problemin e ndërveprimit midis një Konsumatori dhe një Ofruesi të Shërbimeve pa asnjë protokoll të standardizuar.

Së pari, le të shkruajmë vetë formularin e importimit të kontaktit të GMail: Më pas, do t'u kërkojmë zhvilluesve të GMail që ta bëjnë atë në mënyrë që kur një përdorues të lundrojë në URI /auth.php, atij t'i jepet një formular autorizimi (në botën tonë të çiklizmit, GMail është shkruar në PHP). Pas futjes me sukses të fjalëkalimit, përdoruesi duhet të ridrejtohet në sit, URL-ja e të cilit është e specifikuar në parametrin retpath. Gjithashtu, një çelës sekret duhet të kalojë në URL, i cili tashmë mund të përdoret për të hyrë në GMail API.

Pra, pasi të futni fjalëkalimin, përdoruesi do të kthehet në faqen tonë në adresën e mëposhtme: Dhe ne do t'i drejtohemi API-së GMail nga skripti /import.php, do t'i kalojmë çelësin Y49xdN0Zo2B5v0RR dhe do të ngarkojmë kontaktet: Epo, le të bëjmë tani numëroni grabujën (sepse gunga do të jetë shumë vonë për t'u numëruar).

Radha e parë: zëvendësimi i rrugës së kthimit të adresës

Epo, sigurisht, e keni marrë me mend se sulmuesi së pari do të vendosë një lidhje në faqen e tij dhe do t'ju detyrojë të klikoni mbi të. Si rezultat, ai do të marrë çelësin sekret të kthyer nga GMail, dhe kështu kontaktet tuaja:

Gërshetimi i dytë: “përgjimi” i çelësit sekret

Supozoni se ne mbronim disi rrugën e re, dhe tani ajo mund të tregojë vetëm faqen tonë. Por problemi me parametrin sekret mbetet. Sekreti mund të shikohet nga pas ose të përgjohet duke dëgjuar trafikun WiFi. Ose faqja juaj një ditë do të ketë një dobësi XSS që ju lejon të "tërheqni" çelësin sekret. Nëse vendoset si sekret, një sulmues do të jetë në gjendje të lexojë librin tuaj të adresave. Pra, ju duhet të siguroni sekretin nga përgjimi (në mënyrë ideale, mos e kaloni fare përmes URL-së).

Grabujë e tretë: shumë ridrejtime

Nëse çdo thirrje API kërkon një sekret të ndryshëm, atëherë do të na duhet të organizojmë aq ridrejtime në faqen e Ofruesit të Shërbimit sa kemi thirrje. Me përdorimin intensiv të API-së, kjo funksionon shumë ngadalë dhe në mënyrë të papërshtatshme në mënyrë që ...

Rake Katër: Identifikimi i dobët i Konsumatorit

GMail, natyrisht, dëshiron të dijë se kush po përdor API-në e tij. Lejoni aksesin në disa sajte dhe refuzoni hyrjen në të tjera ... Pra, kur krijoni një kërkesë në formën e importimit të kontakteve, Konsumatori (faqja e internetit) duhet të "paraqitet" tek Ofruesi i Shërbimit (GMail). Në rastin tonë, ky funksion kryhet pjesërisht nga retpath (emri i faqes në të), por kjo metodë nuk është universale, sepse Mekanizmi i "prezantimit" duhet të përfshihet gjithashtu kur thirren metodat API.

Fondacioni i OAuth

Vlen të përmendet se ka ende shumë "grabitje nënujore". Unë nuk do t'i përshkruaj këtu, sepse kjo grabujë shtrihet në Hendekun Mariana (thellë, 10920 m). Do të duheshin një duzinë faqe për të përshkruar dobësitë. Kështu që unë do të hidhem direkt në përshkrimin e OAuth, ku të gjitha problemet tashmë janë zgjidhur.

Aplikacioni = Konsumator + Akses API

Kur punoni me OAuth, është e rëndësishme që termi Konsumator të mos kufizohet në kuptimin e "faqes së internetit". Konsumatori është disa Shtojca, dhe se ku ndodhet nuk është aq e rëndësishme. Shembuj të Konsumatorëve nga jeta reale: Por ju nuk mund të gatuani qull vetëm nga OAuth. Në të vërtetë, gjithçka që jep OAuth është aftësia për t'u identifikuar në një shërbim në distancë (Ofruesi i Shërbimit) dhe për të bërë kërkesa të autorizuara në API. Nuk ka rëndësi se si është rregulluar kjo API: mund të jetë SOAP i pastër, qasje REST, etj. Gjëja kryesore është që çdo metodë API të pranojë parametra të veçantë si hyrje, të kaluar sipas protokollit OAuth.

Token = Çelës + Sekret

Një nga parimet e OAuth është që asnjë çelës sekret nuk duhet të kalojë publikisht në kërkesat (ne diskutuam pse në shembullin e mësipërm). Prandaj, protokolli funksionon me konceptin Token. Shenja është shumë e ngjashme me një çift hyrje + fjalëkalim: identifikimi është informacion i hapur dhe fjalëkalimi është i njohur vetëm për palën transmetuese dhe marrëse. Për sa i përket OAuth, analogu i hyrjes quhet Key, dhe analogu i fjalëkalimit është Sekret. Situata kur Sekretin e di vetëm dërguesi dhe marrësi, por askush tjetër, quhet Sekret i përbashkët.

Pra, nëse Konsumatori dhe Ofruesi bien dakord disi mes tyre për Sekretin e Përbashkët, ata mund të shkëmbejnë hapur çelësat përkatës (Çelësi) në URL pa frikë se përgjimi i këtyre çelësave do të jetë i rrezikshëm. Por si të mbroni URL-në me Key nga falsifikimi?

Mesazh = Dokument + Nënshkrim Dixhital

"Nënshkrimi dixhital" tingëllon i frikshëm, por në fakt është mjaft i dukshëm. Kur nënshkruani një dokument me stilolaps, vërtetoni se ky dokument është shkruar nga ju dhe jo nga dikush tjetër. Nënshkrimi juaj, si të thuash, "shtohet" në dokument dhe shkon me të në "një grup".

Në mënyrë të ngjashme, një nënshkrim dixhital i shtohet një blloku të dhënash, duke vërtetuar se personi që i ka krijuar këto të dhëna nuk po imiton një tjetër. Një nënshkrim dixhital nuk e kodon një dokument, ai vetëm garanton vërtetësinë e tij! Nënshkrimi lejon të njëjtin Sekret të përbashkët, të cilin e dinë marrësi dhe dërguesi, por askush tjetër.

Si punon? Lëreni $sharedSecret tonë = 529AeGWg, dhe ne e pëshpëritim atë në veshin e palës marrëse. Ne duam të transmetojmë mesazhin "Telefon im është 1234567" me mbrojtje të garantuar kundër falsifikimit nga një sulmues.

  1. Konsumatori shton një nënshkrim dixhital në mesazh, në përgjithësi $transfer = $message . "-". md5($mesazh . $sharedSecret); // $transfer = "Telefoni im është 1234567" . "-". md5 ("Telefoni im është 1234567" . "529AeGWg")
  2. Ofruesi i Shërbimit merr të dhënat, i ndan përsëri në 2 pjesë - $message dhe $signature - dhe bën saktësisht të njëjtin veprim: $signatureToMatch = md5($message . $sharedSecret); // $signatureToMatch = md5("Telefoni im është 1234567" . "529AeGWg"); Pastaj mbetet vetëm të krahasojmë vlerën që rezulton $signatureToMatch me atë që ishte në të dhënat e marra të nënshkrimit $ dhe të raportoni një false nëse vlerat nuk përputheshin.

Demonstrimi se si funksionon OAuth me një aplikacion të thjeshtë

Për të marrë një ndjenjë për OAuth, na duhen dy gjëra:
  1. Skript që implementon pjesën e klientit të protokollit. Unë shkrova vetëm një skrip kaq të vogël PHP (lidhje arkivi zip). Ky është një widget që mund të futet në sajtet PHP.
  2. Një server testimi OAuth ku mund të eksperimentojmë. Për këtë qëllim, është i përshtatshëm të përdorni RuTwit: ekziston një faqe http://rutvit.ru/apps/new, e cila ju lejon të shtoni një aplikacion testimi në 30 sekonda. (Nga rruga, URL-ja e kthimit në formë mund të hiqet - ne ende e kalojmë atë nga skripti i provës.)
Duke parë kodin e skriptit demo dhe duke lexuar shpjegimet më vonë në artikull, mund të kuptoni detajet e protokollit.

Ju mund ta futni këtë miniaplikacion në çdo sajt PHP thjesht duke kopjuar kodin e tij dhe duke ndryshuar strukturën. Shfaqen të gjitha tweet-et nga shërbimi RuTwit të shënuar me etiketën hash të specifikuar, dhe është gjithashtu e mundur të shtohen cicërima të reja (këtu hyn në lojë OAuth). Miniaplikacioni përdor autorizimin RuTwit API dhe OAuth, të cilat, meqë ra fjala, janë të njëjta me standardin e Twitter API. Ju mund ta ekzekutoni këtë skript në serverin tuaj të testimit. Për ta bërë këtë, duhet të kryeni tre hapa:

  1. Shkarkoni kodin e skriptit dhe vendoseni atë në çdo drejtori të përshtatshme në serverin e uebit.
  2. Regjistroni një aplikacion të ri testimi me serverin OAuth.
  3. Pas regjistrimit të aplikacionit, zëvendësoni parametrat OA_CONSUMER_KEY dhe OA_CONSUMER_SECRET në skript me vlerat e marra nga serveri.

Regjistrimi dhe cilësimet e aplikacionit

Le të flasim se nga vijnë aplikacionet dhe si mëson Ofruesi i Shërbimit për to. Gjithçka është mjaft e thjeshtë: Ofruesi i Shërbimit ka një formular të veçantë regjistrimi të aplikimit që çdokush mund ta përdorë. Këtu është një shembull i një forme të tillë:


Pas regjistrimit të aplikacionit, ju jepen 5 parametra që kërkohen për të punuar me OAuth. Ja si mund të duken ato:


Këtu çelësi i konsumatorit dhe sekreti i konsumatorit janë një lloj "hyrje + fjalëkalim" i aplikacionit tuaj (kujtoni bisedën e mësipërme rreth argumenteve? ky është vetëm një prej tyre). Më lejoni t'ju kujtoj se një sekret konsumatori është një sekret i përbashkët, i njohur vetëm nga dërguesi dhe marrësi, por nga askush tjetër. 3 vlerat e mbetura specifikojnë URL-të e shërbimit, kuptimi i të cilave do të shqyrtojmë tani.

OAuth = Merr shenjën e kërkesës + Ridrejto te autorizimi + Merr shenjën e hyrjes + API-në e thirrjes

Në shembullin e GMail, ne kemi përdorur 2 lloje thirrjesh në distancë: a) ridrejtim përmes shfletuesit; b) qasja në API nga brenda skriptit.

Dhe ne zbuluam një sërë çështjesh sigurie, gjë që sugjeron se duhet të ketë më shumë sfida. Kjo është ajo që ndodh në OAuth: më shumë kërkesa të ndërmjetme shtohen nga skripti i konsumatorit te Ofruesi, duke funksionuar me token. Le t'i hedhim një sy atyre.

  1. Përpunimi i paraqitjes së formularit. Nuk është pjesë e OAuth, por pjesë e aplikacionit tonë. Përpara se të hyjmë në API të Ofruesit, duhet të marrim një urdhër për këtë veprim nga përdoruesi. Këtu është një shembull i një urdhri të tillë:
  2. Merr shenjën e kërkesës (kërkesë e brendshme).
    • Thirrjet e skriptit të konsumatorit Kërko URL-në e shenjës Ofruesi: për shembull, api.rutvit.ru/oauth/request_token. Kërkesa transmeton çelësin e konsumatorit - "hyrja në aplikacion", dhe vetë kërkesa nënshkruhet duke përdorur sekretin e konsumatorit - "fjalëkalimi i aplikacionit", i cili e mbron atë nga falsifikimi.
    • Si përgjigje, Ofruesi gjeneron dhe kthen një token të mbushur me mbeturina të quajtur Request Token. Do të na duhet ende, kështu që duhet ta ruajmë diku - për shembull, në ndryshoren e sesionit $S_REQUEST_TOK.
  3. Ridrejto te Autorizim (përmes ridrejtimit të shfletuesit). Tani aplikacioni ynë ka një shenjë unike të kërkesës. Kërkohet të merret leje nga përdoruesi për të përdorur këtë shenjë, d.m.th. pyet atë autorizoj Request Token.
    • Konsumatori ridrejton shfletuesin në një specifik Autorizoni URL-në Ofruesi: për shembull, api.rutvit.ru/oauth/authorize . Çelësi Request Token kalon në parametrat.
    • Ofruesi shfaq një formular autorizimi për përdoruesin e tij dhe, nëse ai është i autorizuar, e ridrejton shfletuesin prapa. Ku saktësisht? Dhe ne e specifikojmë këtë në parametrin oauth_callback.
  4. Merr shenjën e hyrjes (kërkesë e brendshme). Pra, shfletuesi është rikthyer në aplikacionin tonë pas një sërë ridrejtimesh. Kjo do të thotë që autorizimi në Ofruesin ishte i suksesshëm dhe Shenja e Kërkesës lejohet të funksionojë. Sidoqoftë, në OAuth, për qëllime sigurie, çdo shenjë ka qëllimin e vet, rreptësisht të kufizuar. Për shembull, Request Token përdoret vetëm për të marrë konfirmim nga përdoruesi dhe asgjë tjetër. Për të hyrë në burime, duhet të marrim një shenjë të re - Access Token - ose, siç thonë ata, "të shkëmbejmë Request Token për Access Token".
    • Konsumatori i referohet Hyni në URL-në e shenjës- për shembull, api.rutvit.ru/oauth/access_token , - dhe kërkon t'i japë atij një Token Access në vend të Tokenit të tij të Kërkesës. Kërkesa nënshkruhet në mënyrë dixhitale bazuar në sekretin Request Token.
    • Ofruesi gjeneron dhe kthen një Token Access të mbushur me mbeturina. Ai gjithashtu shënon në tabelat e tij se qasja në API lejohet për këtë Token Access. Aplikacioni ynë duhet të mbajë Token Access nëse do të përdorë API-në në të ardhmen.
  5. Call API (kërkesë e brendshme). Epo, tani kemi një Access Token dhe mund ta kalojmë çelësin e tij kur thërrasim metodat API.
    • Konsumatori gjeneron një kërkesë për API-në e Ofruesit (për shembull, duke përdorur një kërkesë POST sipas ideologjisë REST). Kërkesa kalon çelësin e hyrjes dhe nënshkruhet duke përdorur Sekretin e përbashkët të këtij tokeni.
    • Ofruesi trajton thirrjen API dhe kthen të dhënat në aplikacion.

Fundi i skriptit: prodhimi i miniaplikacionit

Fundi i skenarit duhet të jetë i qartë dhe pa shpjegime të hollësishme.
Listimi 14: Fundi i skriptit: prodhimi i miniaplikacionit
// rasti fundor ) ) // Merrni të gjitha cicërimat e disponueshme. $text = file_get_contents("http://api.rutvit.ru/search.xml?rpp=5&q=" . urlencode("#" . TAG)); $TWEETS = SimpleXMLElement i ri ($tekst); // Shkurtore për shfaqjen e një mesazhi me rikodim dhe citim. funksioni e($text, $quote = 1) ( $text = iconv("utf-8", ENCODING, $text); echo $quote? htmlspecialchars($text) : $text;) ?>
statusi si $tweet) (?>
user->screen_name)?>: teksti_formatuar, 0)?>
?action=form_is_sent" style="margin: 1em 0 0 0">

Lidhje të dobishme në OAuth

  • rutvit
Shto etiketa

Si rezultat, një aplikacion klienti që përdor API-në AdWords mund të hyjë në një llogari AdWords pa adresën e emailit dhe fjalëkalimin e përdoruesit.

Krijo Kredencialet OAuth2

Për të krijuar një kredenciale OAuth2, ndiqni këto hapa:

Përcaktimi i llojit të aplikacionit

Së pari ju duhet të përcaktoni lloji i aplikimit atë që dëshironi të krijoni. Ekzistojnë dy lloje aplikacionesh në API të AdWords:

  • aplikacioni që do të instalohet(rekomandohet);
  • aplikacioni në ueb.

Përdorni tabelën e mëposhtme për të përcaktuar llojin e aplikacionit që ju nevojitet.

Çfarë të zgjidhni Situata
Aplikacioni i instaluar(rekomandohet)
  • Ju menaxhoni të gjitha llogaritë tuaja të AdWords me një llogari menaxheri të nivelit të lartë.
  • Sapo keni filluar apo doni të filloni shpejt.
  • Aplikacioni juaj do të funksionojë me një grup llogarish AdWords me shumë përdorues.
Ueb aplikacion
  • Ju dëshironi të vërtetoni për t'u dhënë përdoruesve të ndryshëm të drejta të ndryshme aksesi në të dhënat e llogarisë tuaj AdWords.
  • Ju duhet të krijoni grupe të shumta kredencialesh, për shembull, për të menaxhuar llogaritë e palëve të treta.
  • Aplikacioni juaj kërkon URL-të e kthimit të telefonatës që nuk mbështeten në aplikacionet që instaloni.
Kujdes!Edhe nëse jeni duke zhvilluar një aplikacion ueb, prapë mund të zgjidhni cilin aplikacion të instaloni. Dallimi kryesor është nëse duhet të telefononi përsëri pasi të lëshohet token. Për shembull, nëse përdorni një llogari menaxheri të nivelit të lartë për të menaxhuar të gjitha llogaritë tuaja të AdWords, aplikacioni që instaloni duhet të regjistrohet, edhe nëse aplikacioni i klientit është i disponueshëm në internet. Shënim.diskutohen më poshtë. Nëse nuk keni nevojë për veçoritë e një llogarie shërbimi, ju rekomandojmë fuqimisht që të përdorni procesin e autorizimit për aplikacionin e instaluar ose në ueb.

Krijoni një ID të klientit dhe kodkalimin

Pasi të keni identifikuar llojin e aplikacionit tuaj, klikoni në skedën e duhur më poshtë dhe ndiqni udhëzimet për të krijuar një ID të klientit dhe kodkalimin.

Aplikacioni i instaluar

  1. hapur
  2. Krijo projekt Krijo.
  3. Krijo Kredencialet, dhe pastaj - ID-ja e klientit OAuth.
  4. Ruaj
  5. Në kapitull Lloji i aplikimit zgjidhni Llojet e tjera dhe jepni informacionin e kërkuar.
  6. Klikoni Krijo.
  7. identifikues dhe Çelësi sekret
Ueb aplikacion
  1. hapur
  2. Nga menyja rënëse e projekteve, zgjidhni Krijo projekt, më pas specifikoni emrin e projektit dhe, nëse është e nevojshme, ndryshoni ID-në e tij, më pas klikoni butonin Krijo.
  3. Në faqen Kredencialet, zgjidhni Krijo Kredencialet, dhe pastaj - ID-ja e klientit OAuth.
  4. Mund t'ju kërkohet një emër produkti. Në këtë rast, shtypni Personalizo dritaren e kërkesës për qasje, shkruani informacionin e kërkuar dhe klikoni Ruaj për t'u kthyer në ekranin e Kredencialeve.
  5. Në kapitull Lloji i aplikimit zgjidhni Ueb aplikacion. Ndiqni udhëzimet për të siguruar burime JavaScript dhe/ose ridrejtuar URI.
  6. Klikoni Krijo.
  7. Në faqen që shfaqet, kopjoni identifikues dhe Çelësi sekret klienti - do t'ju duhen kur konfiguroni bibliotekën e klientit.

Ndiqni udhëzimet e mëposhtme për të konfiguruar përdorimin e kredencialeve OAuth2 me bibliotekën e klientit të gjuhës suaj.

Shënim.Nëse zgjidhni të mos përdorni një nga bibliotekat tona të klientëve, do t'ju duhet të zbatoni proceset për veten ose për veten tuaj.

Shesh lojërash OAuth2

Një mënyrë alternative për të gjeneruar kredencialet OAuth2 është përdorimi Shesh lojërash OAuth2. I kombinuar me Google API Console, ky sistem ju lejon të krijoni vetë argumentet OAuth2.

Sistemi OAuth2 Playground është menduar për ata përdorues që kanë nevojë vetëm për qasje në llogaritë një llogaria e menaxherit ose përdoruesi i AdWords. Nëse ju duhet të kërkoni kredenciale për përdorues të shumtë, atëherë është më mirë të përdorni bibliotekat e klientëve siç përshkruhet më sipër.

Vendosja

Paralajmërim.Per te perdorur Shesh lojërash OAuth2, ju duhet të krijoni ID e klientit për . Kjo i vetmi lloji i aplikacionit që funksionon me OAuth2 Playground. Lexoni më shumë në seksionin e mësipërm.

Si të merrni ID-në e klientit dhe çelësin sekret

  1. hapur
  2. Zgjidhni një projekt ekzistues nga menyja rënëse ose krijoni një të ri.
  3. Në faqen Kredencialet, zgjidhni Krijo Kredencialet, dhe pastaj - ID-ja e klientit OAuth.
  4. Në kapitull Lloji i aplikimit zgjidhni Ueb aplikacion.
  5. Në seksion, shtoni rreshtin e mëposhtëm: https://site/oauthplayground
  6. Klikoni Krijo.
  7. shkruani identifikues dhe Çelësi sekret klientët e listuar në faqen që shfaqet. Do t'ju duhen në hapin tjetër.

Si të krijoni argumente

Paralajmërim.Llogaria e Google në të cilën jeni identifikuar në shfletuesin tuaj përcakton se cilat llogari AdWords mund të përdorni duke përdorur kredencialet e krijuara të OAuth2. Mund të jetë më mirë t'i përfundoni këto hapa në modalitetin e fshehtë ose pa u identifikuar në llogarinë tuaj të Google. Ka të ngjarë që do t'ju duhet të përdorni kredenciale që nuk lidhen me llogarinë në të cilën keni qenë kur keni marrë ID-në e klientit dhe çelësin sekret.

Si të hiqni OAuth2 Playground nga ID-ja e klientit

Sepse ju tashmë keni shenjë rifreskimi, nuk keni më nevojë të përdorni OAuth2 Playground si URI e lejuar e ridrejtimit. Për të hequr këtë sistem nga lista, ndiqni këto hapa:

  1. Shkoni në.
  2. Zgjidhni projektin tuaj nga menyja rënëse.
  3. Në faqen Kredencialet, zgjidhni emrin e ID-së së klientit.
  4. Hiq https://site/oauthplayground në fushë URI-të e lejuara të ridrejtimit. Ju lutemi vini re se duhet të largoheni të paktën një URI-ja e ridrejtuar.
  5. Klikoni Ruaj.

Pra, ju keni kredencialet OAuth. Tani mund të kërkoni API-në e AdWords dhe ta përdorni për bibliotekën e kërkuar të klientit.

Llogaritë e shërbimit OAuth2

Ky seksion përshkruan se si të aksesoni API-në e AdWords duke përdorur llogaritë e shërbimit.

Një llogari shërbimi është një llogari që i përket një aplikacioni dhe jo një përdoruesi përfundimtar individual. Llogaritë e shërbimit ofrojnë ndërveprim ndërmjet një aplikacioni ueb dhe një shërbimi Google. Aplikacioni juaj thërret API në emër të një llogarie shërbimi pa përfshirje të drejtpërdrejtë të përdoruesit.

API AdWords lejon qasjen në llogarinë e shërbimit përmes domeneve të G Suite.

Llogaria e shërbimit zbaton një proces OAuth2 që përdor një skedar kyç që është i disponueshëm vetëm për aplikacionin tuaj në vend që të autorizojë përdoruesin.

Përdorimi i llogarive të shërbimit ofron dy përfitime të rëndësishme:

  • Autorizimi i aksesit të aplikacionit në Google API kryhet në fazën e konfigurimit. Kjo shmang telashet për të kërkuar ndërhyrjen e përdoruesit ose ruajtjen e shenjave në memorie në flukse të tjera OAuth2.
  • Imitimi i përdoruesve të tjerë në aplikacion, nëse është e nevojshme, bëhet si pjesë e procesit të pohimit të OAuth2.
Shënim. Nëse nuk jeni duke përdorur veçori të veçanta të domenit, të tilla si imitimi, rekomandohet shumë të përdoret një proces për . Brenda proceseve për aplikacionet e instalueshme dhe ueb OAuth2, pjesëmarrja e përdoruesit kërkohet vetëm një herë, në momentin e dhënies së aksesit në llogari.

Alternativë për llogaritë e shërbimit

Llogaritë e shërbimit përdoren gjerësisht për të ofruar akses programatik në API nëpërmjet protokollit OAuth2 pa ndërhyrjen e përdoruesit.

Megjithatë, konfigurimi i këtyre llogarive për të punuar me API të AdWords nuk është i lehtë. Një alternativë më e lehtëështë me një shenjë rifreskimi të vazhdueshëm. Kjo qasje i lejon aplikacionit të kërkojë shenja të reja aksesi në çdo kohë.

Si pjesë e këtij procesi, ju duhet të konfiguroni autorizimin e aplikacionit përmes bibliotekës së klientit siç përshkruhet më sipër. Kjo duhet të bëhet vetëm një herë, pasi argumentet e rifreskimit të Google OAuth2 nuk skadojnë kurrë.

Kërkesat

  • Një domen G Suite që zotëroni, si p.sh. mydomain.com ose mybusiness.com.
  • Shenja e zhvilluesit të AdWords API dhe mundësisht një llogari testimi.
  • për gjuhën që përdoret.

Konfigurimi i aksesit për një llogari klienti

Së pari, duhet të krijoni një çelës llogarie shërbimi në Google API Console.

  1. Identifikohu në llogarinë tënde të G Suite, hap .
  2. Nga menyja rënëse e projekteve, zgjidhni Krijo projekt, më pas futni informacionin e kërkuar dhe klikoni butonin Krijo. Projekti i ri do të shfaqet në listën aktive.
  3. Nga menyja në këndin e sipërm të majtë, zgjidhni IAM dhe administrata, dhe pastaj - Llogaritë e Shërbimit në menynë në të majtë.
  4. Klikoni Krijoni një llogari shërbimi në krye të faqes.
  5. Specifikoni emrin e llogarisë së shërbimit.
  6. Kutia e kontrollit Krijo një çelës të ri privat dhe zgjidhni llojin e çelësit JSON.
  7. Kutia e kontrollit Aktivizo delegimin e qasjes në të dhënat në domenin G Suite dhe futni emrin e produktit për dritaren e kërkesës për qasje.
  8. Klikoni Krijo. Shkarkimi i skedarit të çelësit JSON do të fillojë. Ruani skedarin në një vend të sigurt ku vetëm ju keni akses.
  9. Në faqe Llogaritë e Shërbimit do të shfaqet një llogari e re shërbimi.
shënim. Sepse imitimi i përdoruesit mund të kontrollohet vetëm në nivel domeni, për të përdorur llogaritë e shërbimit dhe procesin e miratimit me shërbimet e Google OAuth2, ju nevojitet domeni juaj i regjistruar me G Suite. Të gjithë përdoruesit e domenit që përdorin një llogari shërbimi me lejet e duhura mund të imitojnë çdo përdorues të domenit.

Çështjet e sigurisë

Meqenëse G Suite menaxhohet në nivel domeni, duhet të mbroni në mënyrë të sigurt skedarin kyç që lejon llogaritë e autorizuara të kenë qasje në shërbimet e Google. Kjo është veçanërisht e rëndësishme sepse ne ofrojmë një llogari shërbimi me aftësinë për të imituar çdo përdorues në domen.

Rekomandohet gjithashtu që çdo llogari shërbimi t'i jepet akses vetëm në një API të Google. Për ta bërë këtë, përdorni fushën fushëveprimi, e cila përshkruhet në seksionin vijues. Kjo masë parandaluese ju lejon të kufizoni sasinë e të dhënave që janë të hapura për akses të paautorizuar në rast të një kompromisi të skedarit kyç.

Si të ofrohen aftësitë e imitimit

Për t'i dhënë aftësitë e imitimit të llogarisë suaj të shërbimit, ndiqni këto hapa:

Tani mund të hyni në llogarinë tuaj AdWords duke përdorur llogarinë tuaj të shërbimit si pjesë e procesit të miratimit të OAuth2.

Vendosja e bibliotekës së klientit

Zgjidhni një gjuhë për udhëzimet për konfigurimin e bibliotekës së klientit.

Shënim.Nëse zgjidhni të mos përdorni një nga bibliotekat tona të klientëve, do t'ju duhet ta zbatoni vetë procesin.

Optimizimi i kërkesave OAuth2

Nëse aplikacioni juaj nuk përdor ndarjen e kredencialeve, kjo mund të rrisë ndjeshëm numrin e pyetjeve të dërguara në Google. Si rezultat, serverët tanë mund të vendosin kufizime për një aplikacion të tillë, gjë që do të ngadalësojë performancën e tij.

Ky seksion përshkruan se si të optimizoni menaxhimin e kredencialeve OAuth2 në mënyrë që aplikacioni juaj të ndërveprojë në mënyrë më efektive me API-në e AdWords.

Kujdes!Sipas termit kredencialet kjo i referohet të gjithë grupit të atributeve të një kredenciali OAuth2, duke përfshirë tokenin e aksesit dhe datën e skadimit të tij.

Strategjitë e Shpërndarjes së Kredencialeve

Shpërndarja e kredencialeve nëpër kërkesat e API përmirëson performancën dhe shmang shpenzimet dhe gabimet për shkak të shkeljeve të kufizimeve.

Strategjia për shpërndarjen e kredencialeve varet nga struktura e aplikacionit.

Në aplikacionet me shumë fije, sesioni i çdo thread duhet të përdorë të njëjtat kredenciale.

Në aplikacionet me shumë procese dhe të shpërndara, duhet të zbatohet njëfarë infrastrukture për të kaluar kredencialet ndërmjet proceseve. Përveç kësaj, duhet të shmanget bllokimi i fijeve dhe kushtet e garës.

Në një aplikacion që është njëkohësisht me shumë procese/shpërndarë dhe me shumë fije, çdo proces duhet të kombinojë të dyja strategjitë.

Më poshtë janë strategjitë për vërtetimin e një llogarie të vetme AdWords, siç është llogaria e menaxherit kryesor në një hierarki.

Më pas përshkruan se si të përshtaten këto strategji për .

Aplikacione me shumë fije

Në aplikacionet me shumë fije, kredencialet duhet të jenë të disponueshme për thread të ndryshëm. Përditësimet e kredencialeve duhet të bëhen në mënyrë sinkronike për të shmangur kushtet e garës.

Ky diagram tregon temat që paraqesin kërkesa në API të AdWords në kohën e ekzekutimit. Përdoret një grup i përbashkët i sesioneve (përdoruesve). Vini re se çdo seancë duhet të përdorë të njëjtin objekt kredencial. Në përgjigje të çdo kërkese API, thread merr sesionin (përdoruesin) përkatës. Nëse një shenjë aksesi duhet të rifreskohet, duhet të bëhet në mënyrë sinkronike për të shmangur kushtet e garës. Me fjalë të tjera, objekti kredencial duhet të jetë i sigurt në fije.

Bibliotekat e klientëve e bëjnë të lehtë kalimin e kredencialeve midis temave. Çdo bibliotekë klienti ka një objekt sesioni (ose përdorues) me kredencialet që ripërdor gjatë gjithë ciklit të tij jetësor. Për të përdorur kredencialet nëpër sesione, duhet t'i zbatoni ato kur krijoni çdo sesion. Në të gjitha bibliotekat e klientëve, kredencialet janë një objekt i sigurt për fillin që përditësohet në mënyrë sinkrone kur skadon token-i i aksesit.

Për shembull, në bibliotekën e klientit Java, ju duhet të krijoni një klasë Kredenciale të vetme dhe ta përdorni për të gjitha seancat.

Aplikacione me shumë procese dhe të shpërndara

Në aplikacionet me shumë procese dhe të shpërndara, shpërndarja e kredencialeve duhet të bëhet vazhdimisht. Për të shmangur një gjendje gare ku shumë serverë përpiqen të përditësojnë kredencialet në të njëjtën kohë (duke çuar në një numër të tepërt të kërkesave për përditësime), ju rekomandojmë që të detyroni përditësimin dhe të siguroni kredencialet e përditësuara për të gjitha proceset dhe serverët.

Për shembull, një detyrë ose shërbim i vetëm mund të përditësojë periodikisht kredencialet dhe t'i kalojë ato në dyqanin e të dhënave, ku do të përdoren nga serverë të ndryshëm.

Diagrami tregon përditësimin periodik të kredencialeve dhe shkrimin e vetive të tyre në ruajtjen e të dhënave. Më pas të gjithë serverët marrin kredencialet përpara se të bëjnë një kërkesë në API.

Përditëso detyrën

Detyra e përditësimit përditëson periodikisht kredencialet dhe i dërgon ato në dyqanin e të dhënave. Kjo detyrë nuk duhet të presë që kredencialet aktuale të skadojnë, pasi kjo do të bëjë që aplikacioni të dështojë për ca kohë për shkak të mungesës së kredencialeve të vlefshme.

Alternativa më e mirë është një rifreskim periodik i detyruar, i cili zëvendëson kredencialet në dyqanin e të dhënave me të reja çdo herë. Detyra e përditësimit duhet të funksionojë shumë përpara skadimit të kredencialeve aktuale, në mënyrë që të ketë kohë të mjaftueshme në rast se ndodh një gabim kalimtar. Mund të filloni duke ekzekutuar një përditësim çdo 15 minuta.

Shënim.Nëse tokeni i aksesit në kredencialet skadon ndërsa një kërkesë API është duke u përpunuar, kërkesa do të vazhdojë të ketë sukses. Për shembull, nëse keni krijuar një pyetje afatgjatë dhe ju ka mbetur më pak se një minutë për të hyrë, rezultatet do të kthehen përsëri.

Ruajtja e të dhënave

Dyqani i të dhënave përdoret për të ofruar kredenciale për procese dhe serverë të ndryshëm.

Për ta bërë këtë, mund të përdorni një dyqan ekzistues të të dhënave ose të krijoni një të specializuar përmes të cilit serverët do të marrin kredencialet. Zgjidhjet e mundshme përfshijnë serverët e memories (siç janë Memcached ose Infinispan) dhe dyqanet e të dhënave NoSQL (siç është MongoDB).

Qëllimi kryesor i një magazine të dhënash është të sigurojë një ndërfaqe të besueshme për të gjithë serverët që aksesojnë API. Puna e tij duhet të optimizohet për leximin e shpejtë të të dhënave: serverët dhe proceset do të lexojnë kredencialet më shpesh sesa përditësohen.

Mos harroni se kredencialet duhet të ruhen në mënyrë të sigurt.

Kur ruani kredencialet, duhet të ruani veçorinë expiry_time (koha aktuale + expires_in) dhe refresh_token së bashku me veçorinë access_token. Vetia expiry_time (skadimi i tokenit) llogaritet duke përdorur formulën e mëposhtme: koha e kërkesës për rinovim të aksesit_token + koha e skadimit_në (data e skadimit të tokenit).

Pool serveri

Çdo server në grup merr kredencialet më të reja nga ruajtja e të dhënave përpara se të dërgojë një kërkesë. Për sa kohë që detyra e përditësimit të funksionojë me sukses, kredencialet do të jenë të vlefshme. Megjithatë, nëse një detyrë përditësimi ose ruajtja e të dhënave dështon, duhet të ketë një mekanizëm kthimi.

Nëse serveri ose procesi nuk është në gjendje të marrë kredencialet nga dyqani i të dhënave, ose nëse kredencialet kanë skaduar, serveri duhet të përditësojë kredencialet e tij në mënyrë që aplikacioni të vazhdojë të punojë me API derisa problemi të zgjidhet.

Në proceset me shumë fije, duhet të përdorni të njëjtën strategji për shpërndarjen e kredencialeve midis thread-ve.

Autentifikimi i shumë llogarive

Kredencialet e krijuara për llogarinë e menaxherit AdWords mund të përdoren për të hyrë në të gjitha nën-llogaritë. Përdoruesit me një llogari të vetme menaxheri zakonisht duhet të krijojnë kredenciale për një llogari menaxheri të nivelit të lartë për të autorizuar aplikacionin për të gjitha nën-llogaritë e tyre në AdWords.

Në raste të tjera, aplikacioni ka nevojë për qasje në llogaritë e AdWords që nuk janë të lidhura me njëra-tjetrën në hierarkinë e llogarisë së menaxherit. Kjo situatë kërkon që ju të krijoni dhe mbani kredenciale të shumta për llogari të ndryshme, si p.sh. për çdo llogari klienti AdWords ku keni akses, ose për çdo llogari menaxheri të nivelit të lartë në hierarki të pavarura.

Ju mund t'i ndiqni këto strategji për dhe për aplikacionet me modifikime minimale. Kur përdorni hapësirën ruajtëse të përbashkët, kredencialet duhet të indeksohen nga ID-ja e klientit të llogarisë për të siguruar që kredencialet lidhen me llogarinë e kërkuar. Për më tepër, detyra e përditësimit duhet t'i përditësojë ato në kohë. Pas lidhjes së një llogarie të re, mund t'ju duhet ta hapni atë.

Së fundi, në aplikacionet me shumë fije, ju duhet të shpërndani objektin e kredencialit vetëm midis temave që ekzekutohen në llogarinë me të cilën është lidhur.

Si funksionon OAuth2

shënim. API AdWords nuk e mbështet ende identifikimin e njëkohshëm me një kërkesë të dhënash (hibride) ose delegimin e autoritetit në nivel domeni (2LO).

Fushëveprimi

Një shenjë aksesi mund të sigurojë shkallë të ndryshme aksesi në të dhëna. Parametri i fushës së ndryshueshme përcakton grupin e burimeve dhe operacioneve në të cilat token ofron akses. Kur kërkoni një shenjë aksesi, aplikacioni juaj dërgon një ose më shumë vlera në parametrin e fushës.

Më poshtë janë fushëveprimi aktual dhe i trashëgimisë për API-në e AdWords.

akses jashtë linje

Një aplikacion klienti që përdor API-në e AdWords zakonisht kërkon qasje jashtë linje. Kjo mund të ndodhë nëse aplikacioni duhet të ekzekutojë punë grupore kur një përdorues po shfleton faqen tuaj pa një lidhje interneti.

Aplikacionet e instaluara përdorin si parazgjedhje aksesin jashtë linje.

Kreu i kërkesës HTTP

Kreu HTTP në çdo kërkesë për serverin API AdWords duhet të përfshijë formularin e mëposhtëm:

Autorizimi: Bartësi THE_ACCESS_TOKEN

POST … HTTP/1.1 Pritësi: … Autorizimi: Bartësi 1/fFAGRNJru1FTz70BzhT3Zg Lloji i përmbajtjes: tekst/xml;set=UTF-8 Përmbajtja-Gjatësia: …

Qasuni te argumentet dhe rifreskoni

Në shumicën e rasteve, tokeni i rifreskimit duhet të ruhet në një vend të sigurt pasi mund të nevojitet më vonë. Lexoni më shumë rreth kërkesës së shenjave të aksesit dhe rifreskimit në udhëzuesit e mëposhtëm:

Kur skadon një token aksesi?

Shenja e aksesit ka një datë skadimi, e cila varet nga vlera e expires_in. Një shenjë aksesi e skaduar mund të rifreskohet me një shenjë rifreskimi, megjithatë bibliotekat tona të klientëve e bëjnë këtë automatikisht.

Përveç rasteve kur theksohet ndryshe, përmbajtja e kësaj faqeje është e licencuar sipas licencës Creative Commons Attribution 3.0, dhe mostrat e kodit janë të licencuara sipas Licencës Apache 2.0. Për detaje, shihni faqen tonë. Java është një markë e regjistruar e Oracle dhe/ose e filialeve të saj.

Përditësuar më 24 shtator 2018

Artikujt kryesorë të lidhur