OAuth VKontakte: tumia kwa faida ya kibinafsi. Je, OAuth ni tofauti gani na OpenID? Mikakati ya usambazaji wa kitambulisho

Kwa hivyo, programu ya mteja inayotumia API ya AdWords inaweza kufikia akaunti ya AdWords bila anwani Barua pepe na nenosiri la mtumiaji.

Kuunda Kitambulisho cha OAuth2

Ili kuunda kitambulisho cha OAuth2, fuata hatua zilizo hapa chini.

Kufafanua Aina ya Maombi

Kwanza, unahitaji kuamua aina ya maombi, ambayo unataka kuunda. Kuna aina mbili za programu katika API ya AdWords:

  • programu inayoweza kusakinishwa(inapendekezwa);
  • programu ya wavuti.

Kwa kutumia jedwali hapa chini, amua aina inayotakiwa maombi.

Nini cha kuchagua Hali
Programu inayoweza kusakinishwa(inapendekezwa)
  • Unadhibiti akaunti zote za AdWords ukitumia akaunti moja ya msimamizi ngazi ya juu.
  • Je, ndiyo kwanza unaanza au unataka kuanza haraka?
  • Programu yako itafanya kazi na seti moja ya akaunti za AdWords zilizo na watumiaji wengi.
Programu ya wavuti
  • Je, unataka kuthibitisha ili kutoa watumiaji mbalimbali haki tofauti za ufikiaji kwa data ya akaunti ya AdWords.
  • Unahitaji kuunda seti nyingi za vitambulisho, kwa mfano ili kudhibiti akaunti za watu wengine.
  • Programu yako inahitaji URL za kupigiwa simu ambazo hazitumiki katika programu zilizosakinishwa.
Makini!Hata kama unaunda programu ya wavuti, bado unaweza kuchagua programu ya kusakinisha. Tofauti kuu ni ikiwa upigaji simu unahitaji kufanywa baada ya tokeni kutolewa. Kwa mfano, ukitumia akaunti moja ya msimamizi wa ngazi ya juu ili kudhibiti akaunti zako zote za AdWords, programu unayosakinisha lazima isajiliwe, hata kama programu ya mteja inapatikana kwenye Mtandao. Kumbuka.yanajadiliwa hapa chini. Ikiwa hauitaji vipengele akaunti ya huduma, tunapendekeza sana kutumia mchakato wa uidhinishaji kwa programu iliyosakinishwa au ya wavuti.

Kuunda kitambulisho cha mteja na msimbo wa siri

Baada ya kuamua aina ya programu yako, bofya kwenye kichupo kinachofaa hapa chini na ufuate maagizo ili kuunda kitambulisho na nambari ya siri mteja.

Programu inayoweza kusakinishwa

  1. Fungua
  2. Unda mradi Unda.
  3. Unda Kitambulisho, na kisha - Kitambulisho cha Mteja cha OAuth.
  4. Hifadhi
  5. Katika sura Aina ya maombi chagua Aina zingine na kutoa taarifa zinazohitajika.
  6. Bofya Unda.
  7. kitambulisho Na Ufunguo wa siri
Programu ya wavuti
  1. Fungua
  2. Kutoka kwa menyu kunjuzi ya miradi, chagua Unda mradi, kisha taja jina la mradi na ubadilishe kitambulisho chake ikiwa ni lazima, kisha bofya kitufe Unda.
  3. Kwenye ukurasa wa Vitambulisho, chagua Unda Kitambulisho, na kisha - Kitambulisho cha Mteja cha OAuth.
  4. Unaweza kuulizwa kutoa jina la bidhaa. Katika kesi hii, bonyeza Geuza kukufaa dirisha la ombi la ufikiaji, ingiza habari iliyoombwa na ubofye Hifadhi ili kurudi kwenye skrini ya Kitambulisho.
  5. Katika sura Aina ya maombi chagua Programu ya wavuti. Fuata maagizo ili kubainisha vyanzo vya JavaScript na/au uelekeze upya URI.
  6. Bofya Unda.
  7. Kwenye ukurasa unaoonekana, nakala kitambulisho Na Ufunguo wa siri mteja - utazihitaji wakati wa kusanidi maktaba ya mteja.

Fuata maagizo hapa chini ili kusanidi matumizi ya vitambulisho vya OAuth2 na maktaba ya mteja wa lugha yako.

Kumbuka.Ukichagua kutotumia moja ya maktaba ya mteja wetu, utahitaji kutekeleza michakato kwa ajili yako au wewe mwenyewe.

Uwanja wa michezo wa OAuth2

Chaguo mbadala la kuunda vitambulisho vya OAuth2 ni kutumia Uwanja wa michezo wa OAuth2. Kwa kuunganishwa na Dashibodi ya API ya Google, mfumo huu hukuruhusu kuunda tokeni za OAuth2 wewe mwenyewe.

Mfumo wa OAuth2 Playground umeundwa kwa ajili ya watumiaji wanaohitaji ufikiaji wa akaunti pekee moja akaunti ya msimamizi au mtumiaji wa AdWords. Ikiwa unahitaji kuuliza kitambulisho kwa watumiaji wengi, basi ni bora kutumia maktaba za mteja kama ilivyoelezwa hapo juu.

Mipangilio

Onyo.Kutumia Uwanja wa michezo wa OAuth2, unahitaji kuunda kitambulisho cha mteja Kwa . Hii wa pekee aina ya programu inayofanya kazi na OAuth2 Playground. Soma zaidi katika sehemu hapo juu.

Jinsi ya kupata kitambulisho cha mteja na ufunguo wa siri

  1. Fungua
  2. Chagua mradi uliopo kwenye menyu kunjuzi au uunde mpya.
  3. Kwenye ukurasa wa Vitambulisho, chagua Unda Kitambulisho, na kisha - Kitambulisho cha Mteja cha OAuth.
  4. Katika sura Aina ya maombi chagua Programu ya wavuti.
  5. Katika sehemu ongeza mstari unaofuata: https://site/oauthplayground
  6. Bofya Unda.
  7. Iandike kitambulisho Na Ufunguo wa siri wateja walioonyeshwa kwenye ukurasa unaoonekana. Utazihitaji katika hatua inayofuata.

Jinsi ya kuunda ishara

Onyo.Kutoka kwa nini Akaunti ya Google Umeingia kwenye kivinjari chako, inategemea ni akaunti zipi za AdWords unaweza kufikia kwa kutumia vitambulisho vya OAuth2 utakavyounda. Huenda ikawa bora kukamilisha hatua hizi katika hali fiche au bila kuingia katika Akaunti yako ya Google. Kuna uwezekano kwamba utahitaji kutumia vitambulisho ambavyo ni tofauti na akaunti uliyokuwa nayo ulipopokea Kitambulisho cha Mteja na Ufunguo wa Siri.

Jinsi ya kuondoa Uwanja wa Michezo wa OAuth2 kutoka kwa Kitambulisho cha Mteja

Kwa kuwa tayari unayo onyesha upya ishara, huhitaji tena kutumia Uwanja wa Michezo wa OAuth2 kama URI yako ya kuelekeza kwingine iliyosuluhishwa. Ili kuondoa mfumo huu kwenye orodha, fuata hatua hizi:

  1. Enda kwa .
  2. Chagua mradi wako kutoka kwa menyu kunjuzi.
  3. Kwenye ukurasa wa Vitambulisho, chagua jina la kitambulisho cha mteja.
  4. Ondoa https://site/oauthplayground kutoka kwa uga URI zinazoruhusiwa kuelekeza kwingine. Tafadhali kumbuka kuwa lazima uondoke angalau moja Elekeza URI kwingine.
  5. Bofya Hifadhi.

Kwa hivyo una vitambulisho vyako vya OAuth. Sasa unaweza kuuliza API ya AdWords na kuitumia dhidi ya maktaba ya mteja inayohitajika.

Akaunti za huduma za OAuth2

Sehemu hii inaeleza jinsi ya kufikia API ya AdWords kwa kutumia akaunti za huduma.

Akaunti ya huduma ni akaunti ambayo ni ya programu na si ya mtumiaji binafsi. Akaunti za huduma hutoa mwingiliano kati ya programu ya wavuti na huduma ya Google. Programu yako huita API kwa niaba ya akaunti ya huduma bila kuhusisha watumiaji moja kwa moja.

API ya AdWords inaruhusu ufikiaji wa akaunti ya huduma kwenye vikoa vyote vya G Suite.

Akaunti ya huduma hutekeleza mchakato wa OAuth2, ambao badala ya kuidhinisha mtumiaji hutumia faili muhimu ambayo inapatikana kwa programu yako pekee.

Kutumia akaunti za huduma hutoa faida mbili muhimu:

  • Kuidhinisha ufikiaji wa programu kwa Google API inafanywa katika hatua ya usanidi. Hii inaepuka usumbufu wa kuhitaji kuingilia kati kwa mtumiaji au tokeni za kuweka akiba katika mtiririko mwingine wa OAuth2.
  • Uigaji wa watumiaji wengine katika ombi, ikihitajika, hufanywa kama sehemu ya mchakato wa uidhinishaji wa OAuth2.
Kumbuka. Ikiwa hutumii kazi maalum kikoa, kama vile uigaji, badala ya akaunti za huduma, inashauriwa sana kutumia mchakato wa . Kama sehemu ya usakinishaji wa OAuth2 na michakato ya utumaji programu ya wavuti, ushiriki wa mtumiaji unahitajika mara moja pekee - wakati wa kutoa ufikiaji wa akaunti.

Mbadala kwa akaunti za huduma

Akaunti za huduma hutumiwa sana kutoa ufikiaji wa programu kwa API kupitia itifaki ya OAuth2 bila mtumiaji kuingilia kati.

Hata hivyo, kusanidi akaunti kama hizo kufanya kazi na API ya AdWords si rahisi. Mbadala rahisi zaidi iko na tokeni ya kuonyesha upya inayoendelea. Mbinu hii inaruhusu programu kuomba tokeni mpya za ufikiaji wakati wowote.

Kama sehemu ya mchakato huu, unahitaji kusanidi idhini ya maombi kupitia maktaba ya mteja kama ilivyoelezwa hapo juu. Hii inahitaji kufanywa mara moja tu, kwani ishara zinaisha Masasisho ya Google OAuth2 haina kikomo.

Mahitaji

  • Kikoa cha G Suite unachomiliki, kama vile mydomain.com au mybusiness.com.
  • Tokeni ya msanidi wa API ya AdWords na ikiwezekana akaunti ya majaribio.
  • kwa lugha inayotumika.

Kuweka ufikiaji wa akaunti ya mteja

Kwanza, unahitaji kuunda ufunguo wa akaunti ya huduma kwenye Dashibodi ya API ya Google.

  1. Ingia katika akaunti yako ya G Suite, fungua .
  2. Kutoka kwa menyu kunjuzi ya miradi, chagua Unda mradi, kisha toa maelezo yanayohitajika na ubofye kitufe Unda. Mradi mpya itaonekana kwenye orodha inayotumika.
  3. Katika menyu upande wa kushoto kona ya juu chagua IAM na utawala, na kisha - Akaunti za huduma kwenye menyu upande wa kushoto.
  4. Bofya Unda akaunti ya huduma juu ya ukurasa.
  5. Ingiza jina la akaunti ya huduma.
  6. Angalia kisanduku Unda mpya ufunguo wa kibinafsi na uchague aina ya ufunguo wa JSON.
  7. Angalia kisanduku Washa majukumu ya kufikia data katika kikoa chako cha G Suite na upe jina la bidhaa kwa dirisha la ombi la ufikiaji.
  8. Bofya Unda. Faili ya ufunguo wa JSON itaanza kupakua. Hifadhi faili mahali salama ambapo unaweza kufikia tu.
  9. Kwenye ukurasa Akaunti za huduma akaunti mpya ya huduma itaonekana.
Kumbuka. Kwa sababu uigaji wa mtumiaji unaweza kudhibitiwa pekee katika kiwango cha kikoa, ili kutumia akaunti za huduma na mchakato wa idhini na Huduma za Google OAuth2, utahitaji kikoa chako mwenyewe kisajiliwe na G Suite. Watumiaji wote wa kikoa wanaotumia akaunti ya huduma iliyo na ruhusa zinazofaa wanaweza kuiga mtumiaji yeyote wa kikoa.

Masuala ya usalama

Kwa sababu G Suite inadhibitiwa katika kiwango cha kikoa, ni lazima ulinde kwa usalama faili muhimu inayoruhusu akaunti zilizoidhinishwa kufikia Huduma za Google. Hii ni muhimu hasa kutokana na ukweli kwamba tunatoa akaunti ya huduma na uwezo wa kuiga mtumiaji yeyote wa kikoa.

Kwa kuongeza, inashauriwa kuwa kila akaunti ya huduma iwe na ufikiaji wa API moja tu ya Google. Shamba hutumiwa kwa hili upeo, ambayo imeelezwa katika sehemu inayofuata. Vile kipimo cha kuzuia hukuruhusu kuweka kikomo cha data iliyofunguliwa kwa ufikiaji usioidhinishwa katika tukio la faili muhimu kuathiriwa.

Jinsi ya kutoa uwezo wa uigaji

Ili kutoa uwezo wa uigaji kwa akaunti ya huduma, fuata hatua hizi:

Sasa unaweza kufikia akaunti yako ya AdWords kwa kutumia akaunti yako ya huduma kama sehemu ya mchakato wa kuidhinisha OAuth2.

Kuanzisha maktaba ya mteja

Chagua lugha ili kuona maagizo ya kusanidi maktaba ya mteja.

Kumbuka.Ukichagua kutotumia mojawapo ya maktaba ya mteja wetu, utahitaji kutekeleza mchakato huo wewe mwenyewe.

Kuboresha maombi ya OAuth2

Ikiwa programu yako haitumii kushiriki vitambulisho, inaweza kuongeza kwa kiasi kikubwa idadi ya maombi yanayotumwa kwa Google. Matokeo yake, seva zetu zinaweza kuweka vikwazo kwenye programu hiyo, ambayo itapunguza kasi ya uendeshaji wake.

Sehemu hii inaeleza jinsi ya kuboresha usimamizi wa kitambulisho cha OAuth2 ili programu yako ishirikiane kwa ufanisi zaidi na API ya AdWords.

Makini!Chini ya muda sifa Hii inarejelea seti nzima ya sifa za kitambulisho za OAuth2, ikijumuisha tokeni ya ufikiaji na tarehe yake ya mwisho wa matumizi.

Mikakati ya usambazaji wa kitambulisho

Kusambaza vitambulisho kote kwenye maombi ya API huboresha utendakazi na pia huepuka juu na hitilafu kutokana na ukiukaji wa vikwazo.

Mkakati wa usambazaji wa kitambulisho unategemea muundo wa programu.

KATIKA programu zenye nyuzi nyingi Ni lazima utumie kitambulisho sawa kwa kila kipindi cha mazungumzo.

Katika multiprocess na maombi yaliyosambazwa Ni muhimu kutekeleza baadhi ya miundombinu ya kupitisha sifa kati ya michakato. Kwa kuongeza, lazima uhakikishe kuwa nyuzi hazizuii na hali ya mbio hutokea.

Katika programu ambayo ina michakato mingi/iliyosambazwa na yenye nyuzi nyingi, kila mchakato unahitaji kuchanganya mikakati yote miwili.

Ifuatayo ni mikakati ya kuthibitisha akaunti moja ya AdWords, kama vile akaunti ya msimamizi wa ngazi ya juu katika daraja.

Kisha inaelezea jinsi ya kurekebisha mikakati hii kwa .

Programu zenye nyuzi nyingi

Katika programu zenye nyuzi nyingi, vitambulisho lazima vipatikane kwa nyuzi tofauti. Masasisho ya kitambulisho lazima yafanywe kwa usawa ili kuepuka hali za mbio.

Mchoro huu unaonyesha nyuzi zinazopitisha maombi kwa API ya AdWords wakati wa utekelezaji. Dimbwi la pamoja la vikao (watumiaji) hutumiwa. Kumbuka kwamba kila kipindi lazima kitumie kitu sawa cha vitambulisho. Kwa kujibu kila ombi la API, thread inapokea kikao sambamba (mtumiaji). Ikiwa ishara ya ufikiaji inahitaji kuonyeshwa upya, lazima ifanywe kwa usawa ili kuepusha hali ya mbio. Kwa maneno mengine, kitu cha sifa lazima kiwe salama.

Maktaba za wateja hurahisisha kupitisha vitambulisho kati ya nyuzi. Kila maktaba ya mteja ina kitu cha kikao (au mtumiaji) chenye vitambulisho ambacho kinatumia tena kote mzunguko wa maisha. Ili kutumia vitambulisho katika vipindi vyote, ni lazima uvitumie unapounda kila kipindi. Katika maktaba zote za mteja, kitambulisho ni kitu kisicho na uzi ambacho husasishwa kwa usawa wakati tokeni ya ufikiaji inaisha.

Kwa mfano, katika maktaba ya mteja wa Java ungeunda darasa la Sifa la singleton na uitumie kwa vipindi vyote.

Multiprocess na kusambazwa maombi

Katika michakato mingi na maombi yaliyosambazwa, usambazaji wa kitambulisho lazima uendelee. Ili kuepuka hali ya mbio ambapo seva nyingi hujaribu kusasisha vitambulisho kwa wakati mmoja (kusababisha maombi mengi ya sasisho), inashauriwa kulazimisha sasisho na kutoa vitambulisho vilivyosasishwa kwa michakato na seva zote.

Kwa mfano, kazi au huduma moja inaweza kusasisha kitambulisho mara kwa mara na kuvisukuma kwenye hifadhi ya data ambapo vitatumiwa na seva tofauti.

Mchoro unaonyesha uppdatering wa mara kwa mara wa vitambulisho na kurekodi mali zao kwenye hifadhi ya data. Seva zote kisha hupokea kitambulisho kabla ya kutuma ombi kwa API.

Sasisha kazi

Kazi ya kusasisha mara kwa mara husasisha kitambulisho na kuzituma kwenye hifadhi ya data. Jukumu hili lisisubiri muda wa stakabadhi za sasa kuisha, kwani hii itasababisha maombi kuwa chini kwa muda kutokana na ukosefu wa vitambulisho halali.

Mbadala bora ni mara kwa mara sasisho la kulazimishwa, ambapo vitambulisho katika hifadhi ya data hubadilishwa na mpya kila wakati. Kazi ya kusasisha inapaswa kufanywa vizuri kabla ya muda wa kitambulisho cha sasa kuisha ili kuwe na muda wa kutosha endapo hitilafu ya muda itatokea. Unaweza kuanza kwa kusasisha kila baada ya dakika 15.

Kumbuka.Ikiwa tokeni ya ufikiaji ya kitambulisho itaisha wakati ombi la API linachakatwa, ombi bado litatekelezwa. Kwa mfano, ukiunda swali la muda mrefu na umesalia na chini ya dakika moja kufikia, matokeo bado yatarejeshwa.

Hifadhi ya data

Hifadhi ya data hutumiwa kutoa vitambulisho michakato tofauti na seva.

Ili kufanya hivyo, unaweza kutumia ghala la data lililopo au kuunda maalum ambayo seva zitapokea vitambulisho. Kama suluhu zinazowezekana unaweza kutumia seva za kache (kwa mfano, Memcached au Infinispan) na hifadhi za data za NoSQL (kwa mfano, MongoDB).

Kusudi kuu la ghala la data ni kutoa kiolesura cha kuaminika kwa seva zote zinazofikia API. Uendeshaji wake unahitaji kuboreshwa ili kusoma data kwa haraka: seva na michakato itasoma kitambulisho mara nyingi zaidi kuliko kusasishwa.

Kumbuka kuweka kitambulisho chako salama.

Wakati wa kuhifadhi kitambulisho, lazima uhifadhi mali ya expiry_time ( wakati wa sasa+ expires_in) na refresh_token pamoja na access_token sifa. Sifa ya_muda wa kuisha (tarehe ya kuisha kwa tokeni) inakokotolewa kwa kutumia fomula ifuatayo: muda wa ombi la sasisho la tokeni ya ufikiaji + na kuisha_kwa wakati (tarehe ya kuisha kwa tokeni).

Dimbwi la seva

Kila seva kwenye bwawa hupata kitambulisho cha hivi punde kutoka kwa hifadhi ya data kabla ya kutuma ombi. Mradi tu kazi ya kusasisha inaendeshwa kwa mafanikio, vitambulisho vitakuwa halali. Hata hivyo, ikiwa kazi ya kusasisha au hifadhi ya data itashindwa, lazima kuwe na utaratibu mbadala.

Ikiwa seva au mchakato hauwezi kupata kitambulisho kutoka kwa hifadhi ya data, au ikiwa kitambulisho kimekwisha muda wake, seva lazima isasishe kitambulisho chake ili kuruhusu programu kuendelea kufanya kazi na API hadi tatizo litatuliwe.

Katika michakato yenye nyuzi nyingi, lazima utumie mkakati sawa wa kusambaza vitambulisho kati ya nyuzi.

Uthibitishaji wa Akaunti Nyingi

Kitambulisho kilichoundwa kwa ajili ya akaunti ya msimamizi wa AdWords kinaweza kutumika kufikia akaunti zote za watoto. Watumiaji walio na akaunti moja ya msimamizi kwa kawaida huhitaji tu kuunda stakabadhi za akaunti ya msimamizi wa ngazi ya juu ili kuidhinisha programu kwa akaunti zote za chini za AdWords.

Katika hali nyingine, programu inahitaji ufikiaji wa akaunti za AdWords ambazo hazihusiani na safu ya akaunti ya msimamizi. Katika hali hii, unahitaji kuunda na kudumisha sifa nyingi za akaunti tofauti, kwa mfano, kwa kila akaunti ya mteja wa AdWords ambayo unaweza kufikia, au kwa kila akaunti ya msimamizi wa ngazi ya juu katika madaraja huru.

Unaweza kushikamana na mikakati hii kwa programu zote mbili na mabadiliko madogo. Kutumia hifadhi ya pamoja Vitambulisho lazima vionyeshwe na kitambulisho cha mteja cha akaunti ili kuhakikisha kuwa kitambulisho kinahusishwa na akaunti inayohitajika. Kwa kuongeza, kazi ya sasisho lazima isasishe kwa wakati. Baada ya kuunganisha akaunti mpya, huenda ukahitaji kuizindua.

Mwishowe, katika programu zenye nyuzi nyingi, unahitaji kusambaza kitu cha sifa tu kati ya nyuzi zinazoendesha kwenye akaunti ambayo inahusishwa.

Jinsi OAuth2 inavyofanya kazi

Kumbuka. API ya AdWords bado haiauni kuingia kwa wakati mmoja kupitia ombi la ufikiaji wa data (muundo mseto) au uwakilishi wa ngazi ya kikoa (2LO).

Upeo

Tokeni ya ufikiaji inaweza kutoa viwango tofauti upatikanaji wa data. Kigezo kinachoweza kubadilishwa wigo hufafanua seti ya rasilimali na shughuli ambazo ishara hutoa ufikiaji. Unapoomba tokeni ya ufikiaji, programu yako hutuma thamani moja au zaidi kwa kigezo cha upeo.

Ifuatayo ni upeo wa sasa na urithi wa API ya AdWords.

Ufikiaji wa nje ya mtandao

Programu ya mteja inayotumia API ya AdWords kwa kawaida huomba ufikiaji wa nje ya mtandao. Hili linaweza kutokea ikiwa programu yako inahitaji kufanya kazi za kundi wakati mtumiaji anavinjari tovuti yako bila muunganisho wa Mtandao.

Programu zilizosakinishwa hutumia ufikiaji wa nje ya mtandao kwa chaguomsingi.

Kichwa cha ombi la HTTP

Kichwa cha HTTP katika kila ombi kwa seva ya API ya AdWords lazima iwe na fomu ifuatayo:

Uidhinishaji: Mmiliki THE_ACCESS_TOKEN

POST ... HTTP/1.1 Seva pangishi: ... Uidhinishaji: Mwenye 1/fFAGRNJru1FTz70BzhT3Zg Aina ya Maudhui: text/xml;charset=UTF-8 Urefu wa Maudhui: ...

Fikia na onyesha upya tokeni

Mara nyingi, tokeni ya kuonyesha upya inahitaji kuhifadhiwa mahali salama kwa sababu inaweza kuhitajika baadaye. Kwa maelezo zaidi kuhusu kuomba ufikiaji na kuonyesha upya tokeni, angalia miongozo ifuatayo:

Tokeni ya ufikiaji inapoisha

Tokeni ya ufikiaji ina tarehe ya mwisho wa matumizi ambayo inategemea thamani ya expires_in . Tokeni ya ufikiaji ambayo muda wake umeisha inaweza kuonyeshwa upya kwa kutumia tokeni ya kuonyesha upya, lakini maktaba za wateja wetu hufanya hivyo kiotomatiki.

Isipokuwa kama ilivyobainishwa vinginevyo, maudhui ya ukurasa huu yameidhinishwa chini ya Leseni ya Creative Commons Attribution 3.0, na sampuli za msimbo zimeidhinishwa chini ya Leseni ya Apache 2.0. Kwa maelezo, tazama yetu. Java ni chapa ya biashara iliyosajiliwa ya Oracle na/au washirika wake.

Ilisasishwa Septemba 24, 2018


  1. Kufungua kivinjari kilichojengwa na ukurasa wa kuingia
  2. Mtumiaji anaulizwa kuthibitisha kuwa haki zimetolewa.
  3. Mtumiaji akikubali, kivinjari kitaelekezwa kwenye ukurasa wa mbegu kwenye kipande (baada ya #) URL ambayo huongezwa. ishara ya ufikiaji
  4. Programu huingilia uelekezaji upya na kupokea ishara ya ufikiaji kutoka kwa anwani ya ukurasa
Chaguo hili linahitaji kuinua dirisha la kivinjari katika programu, lakini hauhitaji sehemu ya seva na simu ya ziada seva-kwa-seva kwa kubadilishana nambari ya idhini juu ishara ya ufikiaji.
Mfano
Fungua kivinjari na ukurasa wa kuingia:
> PATA /oauth/authorize?response_type=token&client_id=464119 HTTP/1.1 > Mpangishi: connect.mail.ru

Baada ya mtumiaji kutoa ruhusa, kuelekeza upya hutokea kwa ukurasa wa kawaida wa mbegu, kwa Mail.Ru hii ni 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

Ni lazima maombi yakatiza uelekezaji upya wa mwisho na upate kutoka kwa anwani ishara_ya_ufikiaji na kuitumia kupata rasilimali zinazolindwa.

Uidhinishaji kwa kuingia na nenosiri

Uidhinishaji kwa kuingia na nenosiri ni ombi rahisi la POST, kama matokeo ambayo inarudi ishara ya ufikiaji. Mpango huu sio mpya, lakini umejumuishwa katika kiwango cha jumla na unapendekezwa kutumika tu wakati chaguzi zingine za uidhinishaji hazipatikani.
Mfano
> POST /oauth/token HTTP/1.1 > Jeshi: connect.mail.ru > Content-Type: application/x-www-form-urlencoded > > grant_type=password&client_id=31337&client_secret=deadbeef&username=api@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", < }
Maelezo katika vipimo

Inarejesha idhini ya awali

Kwa kawaida, ishara ya ufikiaji ina maisha mafupi ya rafu. Hii inaweza kuwa na manufaa, kwa mfano, ikiwa inapitishwa njia wazi. Ili kuzuia kulazimisha mtumiaji kuingia baada ya kumalizika muda wake ishara ya ufikiaji"na, katika chaguzi zote hapo juu, kwa kuongeza ishara ya ufikiaji"labda urudi tena onyesha upya ishara. Unaweza kuitumia kupata ishara ya ufikiaji kutumia ombi la HTTP, sawa na idhini ya kutumia kuingia na nenosiri.
Mfano
> POST /oauth/token HTTP/1.1 > Jeshi: connect.mail.ru > Content-Type: application/x-www-form-urlencoded > > grant_type=refresh_token&client_id=31337&client_secret=deadbeef&refresh_token=8xLOxBtZp8< HTTP/1.1 200 OK < Content-Type: application/json < < { < "access_token":"Uu8oor1i", < "token_type":"bearer", < "expires_in":86400, < "refresh_token":"ohWo1ohr", < }

Mnamo 2010, kazi ilianza kabisa toleo jipya Itifaki ya OAuth 2.0, ambayo haitakuwa nyuma sambamba na OAuth 1.0. Mnamo Oktoba 2012, mfumo wa OAuth 2.0 ulichapishwa katika RFC 6749, na matumizi ya mtoaji tokeni katika RFC 6750, viwango vyote viwili vinavyofuatilia maombi ya maoni. Ziada Hati za RFC bado zinaendelezwa.

Kulikuwa na sharti kadhaa za kuunda OAuth 2.0. Kwanza kabisa, OAuth sio jambo dogo kutumia kwa upande wa mteja. Mojawapo ya malengo yetu tunapotengeneza OAuth mpya ni kurahisisha usanidi maombi ya mteja. Pili, licha ya utekelezaji wa njia tatu (zinazoitwa mtiririko) zilizotajwa katika kiwango cha kupata ishara (kitambulisho cha kipekee) cha idhini: kwa programu za wavuti, wateja wa desktop na wateja wa simu, kwa kweli, njia zote tatu zimeunganishwa kuwa moja. Na tatu, itifaki iligeuka kuwa mbaya sana. Imepangwa kuongeza:

  • Mitiririko 6 mpya.
Mtiririko wa Wakala wa Mtumiaji - kwa wateja wanaoendesha ndani ya wakala wa mtumiaji (kwa kawaida kivinjari cha wavuti). Mtiririko wa seva ya wavuti ( Seva ya Wavuti Mtiririko - kwa wateja ambao ni sehemu ya programu ya wavuti ya seva, inayopatikana kupitia maombi ya HTTP. Mtiririko wa Kifaa - Inafaa kwa wateja wanaotumia vifaa vichache, lakini wapi mtumiaji wa mwisho Ina ufikiaji tofauti kwa kivinjari kwenye kompyuta au kifaa kingine. Jina la mtumiaji na mkondo wa nenosiri (Jina la mtumiaji na Nenosiri Mtiririko - Hutumika katika hali ambapo mtumiaji anamwamini mteja kushughulikia vitambulisho vyake, lakini bado haitapendeza kumruhusu mteja kuhifadhi jina la mtumiaji na nenosiri. Thread hii inafaa tu wakati kuna shahada ya juu uaminifu kati ya mtumiaji na mteja. Mtiririko wa Kitambulisho cha Mteja - Mteja hutumia kitambulisho chake kupata tokeni. Mtiririko wa Madai - Mteja huwasilisha dai, kama vile madai ya SAML, kwa seva ya uidhinishaji ili kubadilishana na tokeni. Maombi yanaendelea Tarakilishi au kifaa cha mkononi inaweza kutekelezwa kwa kutumia nyuzi zilizo hapo juu.
  • Ishara ya mbebaji.
Njia ya idhini ni sawa mbinu iliyopo idhini kwa kutumia vidakuzi. Katika kesi hii, ishara inatumiwa moja kwa moja kama siri (ukweli wa kuwa na ishara huidhinisha mteja) na hupitishwa kupitia HTTPS. Hii hukuruhusu kufikia API kupitia maandishi rahisi(kwa mfano kutumia cURL).
  • Sahihi iliyorahisishwa.
Sahihi imerahisishwa sana ili kuondoa hitaji la uchanganuzi maalum, usimbaji, na upangaji wa vigezo.
  • Ishara za muda mfupi na idhini ya muda mrefu.
Badala ya kutoa ishara ya muda mrefu (ambayo muda mrefu inaweza kuathiriwa), seva hutoa ufikiaji wa muda mfupi na uwezo wa muda mrefu wa kusasisha tokeni bila mwingiliano wa mtumiaji.
  • Mgawanyiko wa majukumu.
Seva tofauti zinaweza kuwajibika kwa uidhinishaji na kutoa ufikiaji kwa API.

Inafaa kukumbuka kuwa ingawa kiwango cha OAuth 2.0 bado hakijaidhinishwa, tayari kinatumiwa na baadhi ya huduma. Kwa mfano, Grafu API mtandao wa kijamii Facebook inaauni OAuth 2.0 pekee.

Tofauti kati ya OAuth na OpenID

Kuna maoni potofu kwamba OAuth ni kiendelezi cha itifaki ya OpenID. Kwa kweli hii si kweli. Ingawa OpenID na OAuth zina mfanano mwingi, ya mwisho ni itifaki inayojitegemea ambayo haihusiani kwa njia yoyote na OpenID.

Muhuri wa saa na Nonce

Ili kuzuia tishio la maombi tumia tena OAuth hutumia nonce na muhuri wa muda. Neno "nonce" linamaanisha kwamba, kupewa muda imetumika mara moja na ni mfuatano wa kipekee wa nasibu wa herufi na nambari ambao unakusudiwa kutambua kwa njia ya kipekee kila ombi lililotiwa saini. Kwa kuwa na kitambulisho cha kipekee kwa kila ombi, mtoa huduma ataweza kuzuia maombi ya kutumia tena. Hii inamaanisha kuwa mteja hutoa mfuatano wa kipekee kwa kila ombi analotuma kwa seva, na seva hufuatilia nonsi zote zinazotumiwa kuzizuia zisitumike mara ya pili.

Kutumia nonce kunaweza kuwa ghali sana kwa seva kama wanavyohitaji hifadhi ya kudumu zote hazikupata mara moja. Ili kurahisisha utekelezaji, OAuth huongeza muhuri wa muda kwa kila ombi, ambayo huruhusu seva kuhifadhi nonce kwa muda mfupi pekee. Ombi linapowasili na muhuri wa muda ambao ni mapema zaidi ya muda uliohifadhiwa, hukataliwa kwa kuwa seva haina tena nonce kutoka wakati huo.

Vitambulisho na Ishara

OAuth hutumia aina tatu za mamlaka: kitambulisho cha mteja (mtumiaji ufunguo na siri au kitambulisho cha mteja), kitambulisho cha muda (ishara ya ombi na vitambulisho vya siri au vya muda) na ishara (tokeni ya ufikiaji na vitambulisho vya siri au tokeni).

Kitambulisho cha mteja hutumiwa kuthibitisha mteja. Hii inaruhusu seva kukusanya taarifa kuhusu wateja. Kwa kutumia huduma zake, seva hutoa baadhi ya wateja matibabu maalum, kama vile kudhibiti ufikiaji bila malipo, au kumpa mwenye rasilimali zaidi maelezo ya kina kuhusu wateja wanaojaribu kufikia rasilimali zao zinazolindwa. Katika baadhi ya matukio, vitambulisho vya mteja vinaweza si salama na vinaweza kutumika tu madhumuni ya habari, kwa mfano, katika programu za kompyuta.

Ishara hutumiwa badala ya jina na nenosiri la mmiliki wa rasilimali. Mmiliki wa rasilimali hashiriki stakabadhi zake na mteja, lakini huidhinisha seva kumpa mteja tokeni - aina maalum ya vitambulisho vinavyowakilisha ufikiaji wa ruzuku. Mteja hutumia tokeni kufikia rasilimali iliyolindwa bila kujua nenosiri la mmiliki wa rasilimali.

Tokeni huwa na kitambulisho, kwa kawaida (lakini si mara zote) seti nasibu ya herufi na nambari ambazo ni za kipekee na ngumu kukisia, na ufunguo wa kulinda tokeni isitumike. watu wasioidhinishwa. Tokeni ina kikomo cha muda na muda, na inaweza kubatilishwa wakati wowote na mmiliki wa rasilimali bila kuathiri tokeni zingine zinazotolewa kwa wateja wengine.

Mchakato wa uidhinishaji wa OAuth pia hutumia seti ya kitambulisho cha muda ambacho hutumika kubainisha ombi la uidhinishaji. Ili kupokea aina tofauti za wateja (wavuti, kompyuta ya mezani, simu ya mkononi, n.k.), kitambulisho cha muda hutoa unyumbufu na usalama zaidi.

Jinsi OAuth inavyofanya kazi

Jinsi itifaki ya OAuth inavyofanya kazi

Wacha tueleze utendakazi wa itifaki ya OAuth kwa kutumia mfano. Hebu tuseme kwamba mtumiaji (mmiliki wa rasilimali) anataka kuchapisha picha zake (rasilimali) zilizopakiwa kwenye tovuti "photos.example.net" (seva) kwa kutumia huduma ya uchapishaji "printer.example.net" (mteja).

  1. Mteja, kwa kutumia itifaki ya HTTPS, hutuma ombi kwa seva iliyo na kitambulisho cha mteja, muhuri wa muda, anwani ya kupiga tena ambayo tokeni inapaswa kurejeshwa, aina ya sahihi ya dijiti inayotumiwa, na sahihi yenyewe.
  2. Seva inakubali ombi na hujibu mteja kwa Tokeni ya Ufikiaji na sehemu ya siri iliyoshirikiwa.
  3. Mteja huhamisha tokeni kwa mmiliki wa rasilimali (mtumiaji) na kuielekeza kwenye seva kwa uidhinishaji.
  4. Seva, ikiwa imepokea ishara kutoka kwa mtumiaji, inamuuliza kuingia kwake na nenosiri, na ikiwa uthibitishaji umefanikiwa, inauliza mtumiaji kuthibitisha upatikanaji wa mteja kwa rasilimali (idhini), baada ya hapo mtumiaji anaelekezwa na seva kwa mteja.
  5. Mteja hupitisha tokeni kwa seva kupitia TLS na kuomba ufikiaji wa rasilimali.
  6. Seva inakubali ombi na hujibu mteja kwa tokeni mpya ya ufikiaji.
  7. Kwa kutumia ishara mpya, mteja huwasiliana na seva kwa rasilimali.
  8. Seva inakubali ombi na hutoa rasilimali.

Mfano huu unaelezea mtiririko na msimbo wa uidhinishaji (Mtiririko wa Msimbo wa Uidhinishaji). Kwa kuongezea, kiwango cha OAuth 2.0 kinaelezea mtiririko ufuatao:

Tofauti kutoka kwa mtiririko wa nambari ya uthibitishaji ni kwamba mteja hajaidhinishwa na seva na tokeni ya ufikiaji hutolewa na seva baada ya ombi la uidhinishaji.
  • Inaonyesha upya Mtiririko wa Tokeni ya Ufikiaji Ulioisha Muda wake
Tofauti ya mkondo huu kutoka kwa mfano uliopewa kama ifuatavyo: katika hatua ya 2, seva, pamoja na ishara ya ufikiaji, ambayo ina muda mdogo maisha, hutoa ishara ya kuburudisha; katika hatua ya 8, seva hukagua ikiwa ishara ya ufikiaji ni halali (kwa maana ya kuisha kwa maisha), na kulingana na hii, inatoa ufikiaji wa rasilimali au inahitaji tokeni ya ufikiaji kusasishwa (ambayo hutolewa wakati wa kuwasilisha. ishara ya kuburudisha).
  • Mtiririko wa Kitambulisho cha Nenosiri la Mmiliki wa Rasilimali
Katika mtiririko huu, mmiliki wa rasilimali hutoa mteja kwa kuingia na nenosiri, huwapitisha kwa seva na hupokea ishara ili kufikia rasilimali. Licha ya ukweli kwamba hali hii ya operesheni ni kinyume na dhana ya kuunda itifaki, inaelezwa katika vipimo.
  • Mtiririko wa Kitambulisho cha Mteja
KATIKA hali hii jinsi itifaki inavyofanya kazi, seva hutoa ishara ya ufikiaji baada ya mteja kusambaza mtumiaji wake na nenosiri, ambalo hapo awali liliwekwa na seva ya idhini (uainishaji hauelezei jinsi gani hasa). Kwa kweli, mteja mara moja hupitia idhini na uthibitishaji.

OAuth hutumia mbinu mbili za kuthibitisha ujumbe kutoka kwa mteja: HMAC -SHA1 na RSA -SHA1 . Inawezekana kutuma ujumbe bila saini, kisha "maandishi wazi" yanaonyeshwa kwenye uga wa aina ya saini. Lakini katika kesi hii, kwa mujibu wa vipimo, uunganisho kati ya mteja na seva lazima uanzishwe kupitia SSL au TLS.

Lango kwa kutumia OAuth

Majadiliano

Mnamo Julai 2012, Eran Hammer, mhariri wa sasa wa kiwango cha OAuth 2.0, alitangaza kujiuzulu baada ya miaka mitatu ya kazi juu ya kiwango kipya, na akaomba jina lake liondolewe kutoka kwa vipimo. Amezungumza kuhusu maoni yake kwenye tovuti yake. Baadaye alitoa mada. .

Vidokezo

Angalia pia

Viungo


Wikimedia Foundation. 2010.


  1. Kufungua kivinjari kilichojengwa na ukurasa wa kuingia
  2. Mtumiaji anaulizwa kuthibitisha kuwa haki zimetolewa.
  3. Mtumiaji akikubali, kivinjari kitaelekezwa kwenye ukurasa wa mbegu kwenye kipande (baada ya #) URL ambayo huongezwa. ishara ya ufikiaji
  4. Programu huingilia uelekezaji upya na kupokea ishara ya ufikiaji kutoka kwa anwani ya ukurasa
Chaguo hili linahitaji kuinua kidirisha cha kivinjari kwenye programu, lakini hauitaji sehemu ya seva na simu ya ziada kutoka kwa seva hadi seva kwa kubadilishana. nambari ya idhini juu ishara ya ufikiaji.
Mfano
Fungua kivinjari na ukurasa wa kuingia:
> PATA /oauth/authorize?response_type=token&client_id=464119 HTTP/1.1 > Mpangishi: connect.mail.ru

Baada ya mtumiaji kutoa ruhusa, kuelekeza upya hutokea kwa ukurasa wa kawaida wa mbegu, kwa Mail.Ru hii ni 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

Ni lazima maombi yakatiza uelekezaji upya wa mwisho na upate kutoka kwa anwani ishara_ya_ufikiaji na kuitumia kupata rasilimali zinazolindwa.

Uidhinishaji kwa kuingia na nenosiri

Uidhinishaji kwa kuingia na nenosiri ni ombi rahisi la POST, kama matokeo ambayo inarudi ishara ya ufikiaji. Mpango huu sio mpya, lakini umejumuishwa katika kiwango cha jumla na unapendekezwa kutumika tu wakati chaguzi zingine za uidhinishaji hazipatikani.
Mfano
> POST /oauth/token HTTP/1.1 > Jeshi: connect.mail.ru > Content-Type: application/x-www-form-urlencoded > > grant_type=password&client_id=31337&client_secret=deadbeef&username=api@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", < }
Maelezo katika vipimo

Inarejesha idhini ya awali

Kwa kawaida, ishara ya ufikiaji ina maisha mafupi ya rafu. Hii inaweza kuwa muhimu, kwa mfano, ikiwa inapitishwa kwa njia zilizo wazi. Ili kuzuia kulazimisha mtumiaji kuingia baada ya kumalizika muda wake ishara ya ufikiaji"na, katika chaguzi zote hapo juu, kwa kuongeza ishara ya ufikiaji"labda urudi tena onyesha upya ishara. Unaweza kuitumia kupata ishara ya ufikiaji kutumia ombi la HTTP, sawa na idhini ya kutumia kuingia na nenosiri.
Mfano
> POST /oauth/token HTTP/1.1 > Jeshi: connect.mail.ru > Content-Type: application/x-www-form-urlencoded > > grant_type=refresh_token&client_id=31337&client_secret=deadbeef&refresh_token=8xLOxBtZp8< HTTP/1.1 200 OK < Content-Type: application/json < < { < "access_token":"Uu8oor1i", < "token_type":"bearer", < "expires_in":86400, < "refresh_token":"ohWo1ohr", < }

Kuna njia nyingi za kusambaza barua taka mbaya kwenye VKontakte. Lakini wadudu hawalala, zaidi na zaidi huja kwenye vichwa vyao mawazo ya kuvutia. Na iligeuka kuwa muhimu sana. Walaghai wamejifunza kuitumia kukwepa ukurasa wa onyo kuhusu tovuti hasidi.

Na yote yalianza wakati siku moja ujumbe ufuatao ulionekana kwenye ukuta wangu:


Kwa udadisi, nilifuata kiungo na kuishia kwenye tovuti nyingine ya kuhadaa ili kupata maelezo ya kibinafsi. Lakini kiunga chenyewe kilionekana kuwa cha kushangaza kwangu, ilionekana kama (nusu ya wahusika katika ASCII):
vkontakte.ru/away.php ? kwa=http%3A%2F%2FApi.vKontakte.Ru%2F%2Fo%2561u%2574%…

Hapa ndipo furaha huanza ...
Wacha tuangalie kiunga cha pili katika sehemu:

Kila parameta inamaanisha nini:

  • mteja_id - kitambulisho cha programu ambayo inahitaji uidhinishaji;
  • redirect_uri - anwani ambayo access_token itatumwa (kupitia kuelekeza);
  • kuonyesha - aina ya dirisha la idhini (ukurasa, popup, gusa na wap).
Kwa kweli, redirect_uri ilikuwa na anwani ya tovuti ya kuhadaa ili kupata maelezo ya kibinafsi. Kwa kuwa kulikuwa na hitilafu katika kigezo cha kuonyesha (kilikuwa na takataka "?390852"), dirisha la uidhinishaji halikuonyeshwa, lakini mara moja lilielekezwa kwenye tovuti ya hadaa yenye vigezo vifuatavyo: error=invalid_request&error_description=Onyesho+Batili+limepitishwa.

Hii ndio hatua nzima ya kupitisha orodha nyeusi ya tovuti mbaya za VKontakte. Tahadhari tu kuhusu mpito kwa api.vk.com inaonekana. Na kama matokeo ya mabadiliko hayo, tunaenda moja kwa moja kwenye tovuti ya kuhadaa ili kupata maelezo ya kibinafsi ambayo iko kwenye orodha iliyoidhinishwa. Unapofuata kiungo vkontakte.ru/away.php?to=vgostivk.dyndns**:

Kama ilivyotokea, programu inayodaiwa kuhitaji idhini ilikuwa ikining'inia kwa mtumiaji aliyedukuliwa:

Na tovuti ya hadaa yenyewe iliundwa kwa kuvutia sana. Ubunifu, kama kawaida, ulikuwa mtindo wa mawasiliano na uliulizwa kuingia. Niliingia kwa kutumia barua pepe na nenosiri la nasibu, na nimemeza bandia vizuri. Kilichotokea baadaye kilikuwa cha kufurahisha zaidi; habari kutoka kwa "Pavel Durov" zilionekana kwenye ukurasa kuu:

Baada ya kubofya kitufe cha "Unda kihesabu cha kibinafsi", upau mzuri wa maendeleo ulifuata. Kisha uliulizwa kuashiria nambari yako na kutuma SMS:

Kwa nadharia, baada ya "kuwezesha" kufanikiwa inapaswa kuelekezwa kwenye ukurasa wa activ.php, lakini sikuweza kufika huko. Dondoo kutoka kwa hati za JS za tovuti ya kuhadaa ili kupata maelezo ya kibinafsi:

...
ikiwa (req.hali == 200) (
// ikiwa hali ni 200 (Sawa) - toa jibu kwa mtumiaji
ikiwa (req.responseText == "sawa" ) (
//statusElem.innerHTML = "Kila kitu kinapiga kelele!";
get_activation();
}
ikiwa (req.responseText == "not" ) (statusElem.innerHTML = "Msimbo batili wa kuwezesha";}
//statusElem.innerHTML = "Jibu la seva: "+req.responseText;
...
kazi get_activation() (
hati .location="activ.php" ;
}

* Msimbo huu wa chanzo uliangaziwa kwa Kiangazia Chanzo cha Msimbo.


Mstari wa chini: Walaghai hutumia OAuth 2.0 kukwepa maonyo, kupata nenosiri na barua pepe ya mtumiaji, na hata kujaribu kulaghai kutuma sms(uwezekano mkubwa zaidi unatumia mfumo wa usajili).