Kas ir OAuth? „Pierakstīties ar Google” un deleģēta piekļuve izskaidrota
OAuth ir atvērts standarts, kas ļauj lietotājam piešķirt vienai lietotnei ierobežotu piekļuvi savam kontam citā pakalpojumā, nenododot paroli. Kad noklikšķini „Savienot Google kalendāru” un redzi ekrānu, kas jautā „Vai atļaut šai lietotnei redzēt maniem notikumiem?”, tas ir OAuth. Lietotne saņem marķieri tieši tam, ko apstiprināji, un to vari atsaukt jebkurā brīdī. Tā pati mehānika ar papildu slāni, ko sauc par OpenID Connect, nodrošina „Pierakstīties ar Google” un līdzīgas pogas.
Kāpēc OAuth ir svarīgs, veidojot ar MI
OAuth parādās divās bieži sastopamās situācijās, veidojot lietotni:
- Sociālā pieteikšanās. Vēlies, lai lietotāji „Pierakstītos ar Google” (vai Apple, Microsoft, GitHub), nevis izveidotu citu paroli. Skat. kā pievienot pieteikšanos savai lietotnei.
- Savienošanās ar lietotāju kontiem citos pakalpojumos. Tavai lietotnei vajag nolasīt lietotāja kalendāru, publicēt viņa sociālajā kontā, izgūt failus no mākoņa diska vai sinhronizēt grāmatvedības datus.
Abos gadījumos tavs MI veidotājs var uzrakstīt kodu, bet dažus soļus var izdarīt tikai tu: izveidot izstrādātāja lietotni pie nodrošinātāja, iegūt klienta ID un klienta noslēpumu, reģistrēt atzvanīšanas URL un dažām atļaujām iziet nodrošinātāja pārskatīšanu. Zinot, kā darbojas OAuth, šie soļi — un kļūdas, ko tie rada — kļūst daudz mazāk noslēpumaini. Plašākam pieteikšanās skatam skat. kas ir autentifikācija.
Ikdienas analoģija
Domā par viesnīcas atslēgas karti. Reģistrācijas brīdī pieņemšanas darbinieks pārbauda, kas tu esi, tad iedod karti, kas atver tavu istabu un trenažieru zāli — ne citas istabas, ne darbinieku zonas — un pārstāj darboties izrakstīšanās brīdī. Karte nesatur tavu pasi. Ja to pazaudē, dienests to anulē un izsniedz jaunu.
- Pieņemšanas galds ir autorizācijas serveris (Google pieteikšanās lapa).
- Tava identitātes pārbaude ir tavs pieteikums Google.
- Atslēgas karte ir piekļuves marķieris.
- „Tikai istaba un trenažieru zāle” ir tvērumi, ko apstiprināji.
- Izrakstīšanās ir marķiera beigas vai tavs piekļuves atsaukums.
Lietotne, ko izmanto, nekad neredz tavu Google paroli, tikai atslēgas karti.
Kā darbojas OAuth soli pa solim
Visbiežākā plūsma tīmekļa lietotnēm ir autorizācijas koda plūsma. Te ir, kas notiek, kad lietotājs savieno savu Google kalendāru ar plānošanas lietotni:
-
Klikšķis. Lietotājs noklikšķina „Savienot Google kalendāru”.
-
Pāradresācija uz nodrošinātāju. Lietotne nosūta pārlūkprogrammu uz Google ar savu klienta ID, vēlamajiem tvērumiem (lasīt kalendāra notikumus) un pāradresācijas URI, kur Google jāatgriež lietotājs.
-
Pieteikšanās un piekrišana. Lietotājs pierakstās Google (ja vēl nav) un redz piekrišanas ekrānu ar sarakstu, ko lietotne prasa. Noklikšķina Allow.
-
Atpakaļ ar kodu. Google pāradresē pārlūkprogrammu uz lietotnes pāradresācijas URI ar īslaicīgu vienreizēju autorizācijas kodu.
-
Apmaiņa serverī. Lietotnes serveris nosūta šo kodu kopā ar klienta noslēpumu tieši Google un saņem piekļuves marķieri (un bieži atjaunošanas marķieri).
-
Izmantot API. Serveris izsauc Google Calendar API ar piekļuves marķieri un iegūst lietotāja notikumus.
-
soļa atzvanīšana izskatās apmēram šādi:
https://yourapp.com/auth/google/callback?code=4/0Adeu5B...&state=x7Kq9
Un 5. soļa marķiera atbilde ir JSON šādā formā:
{
"access_token": "ya29.a0Af...",
"expires_in": 3599,
"refresh_token": "1//0gL...",
"scope": "https://www.googleapis.com/auth/calendar.readonly",
"token_type": "Bearer"
}
Svarīgs dizaina punkts: marķieru apmaiņa notiek serveris-serverim, tāpēc klienta noslēpumam un marķieriem nekad nav jāiet cauri pārlūkprogrammai.
OAuth pret OpenID Connect pret tavu pašu pieteikšanos
| Ko tas atbild | Piemērs | |
|---|---|---|
| OAuth 2.0 | „Ko šī lietotne drīkst darīt lietotāja vārdā?” (autorizācija) | Nolasīt lietotāja kalendāru |
| OpenID Connect (OIDC) | „Kas ir šis lietotājs?” (autentifikācija), balstīts uz OAuth | „Pierakstīties ar Google”, kas atgriež apstiprinātu e-pastu |
| Tava pati pieteikšanās | „Vai šī ir pareizā parole šim kontam?” | E-pasts un parole, glabāti (sajaukti) tavā datubāzē |
Daudzas lietotnes apvieno tos: e-pasta un paroles pieteikšanos, plus „Pierakstīties ar Google” caur OIDC, plus atsevišķus OAuth savienojumus ar citiem pakalpojumiem.
Galvenie termini
| Termins | Nozīme |
|---|---|
| Nodrošinātājs / autorizācijas serveris | Pakalpojums, kurā lietotājs pierakstās un piešķir piekļuvi — Google, Microsoft, GitHub. |
| Klients | Tava lietotne, reģistrēta pie nodrošinātāja. |
| Klienta ID | Tavas lietotnes publiskais identifikators pie nodrošinātāja. |
| Klienta noslēpums | Tavas lietotnes privātā parole pie nodrošinātāja. Tikai serverī. |
| Tvērums | Konkrēta atļauja, piemēram, „lasīt kalendāru” vai „skatīt e-pasta adresi”. |
| Piekrišanas ekrāns | Lapa, kur lietotājs redz un apstiprina pieprasītos tvērumus. |
| Pāradresācijas URI / atzvanīšanas URL | Kur nodrošinātājs atgriež lietotāju. Jābūt reģistrētam iepriekš un jāsakrīt precīzi. |
| Piekļuves marķieris | Īslaicīga pilnvara API izsaukumiem. |
| Atjaunošanas marķieris | Ilgāk derīga pilnvara jaunu piekļuves marķieru saņemšanai. Glabā to kā paroli. |
| ID marķieris | OIDC gadījumā parakstīts marķieris, kas apraksta, kas ir lietotājs. |
| PKCE | Papildu pārbaude („proof key”), kas aptur pārtvertu kodu izmantošanu. Ieteicama visiem klientiem. |
| state | Nejauša vērtība, kas aizsargā plūsmu pret viltotiem pieprasījumiem. |
Biežākie maldīgi priekšstati
- „OAuth ir pieteikšanās sistēma.” Vienkāršs OAuth piešķir piekļuvi; OpenID Connect apstrādā identitāti. Izmantot kailu piekļuves marķieri kā pierādījumu, kas kāds ir, ir radījis reālas drošības kļūdas.
- „Lietotne saņem manu paroli.” Tā nekad nesaņem. Tieši tāds ir mērķis.
- „Vairāku tvērumu pieprasīšana ir nekaitīga.” Lietotāji ir piesardzīgāki pret plašiem pieprasījumiem, un nodrošinātāji, piemēram, Google, var prasīt lietotnes pārskatīšanu sensitīviem vai ierobežotiem tvērumiem. Pieprasi tikai to, kas vajadzīgs.
- „Klienta noslēpumu var ielikt frontend.” Viss pārlūkprogrammas kodā ir publisks. Glabā to servera puses noslēpumos.
- „Tas strādā testēšanā, tātad strādās produkcijā.” Nodrošinātāji bieži ierobežo neverificētas lietotnes — piemēram, uz uzskaitītiem testa lietotājiem —, un pāradresācijas URL tavam dzīvajam domēnam jāreģistrē atsevišķi.
- „Marķieri ilgst mūžīgi.” Piekļuves marķieri ātri beidzas, un lietotāji var atsaukt piekļuvi. Tavai lietotnei ar abiem jātiek galā labi.
Ko lūgt savam MI veidotājam
- „Pievieno „Pierakstīties ar Google”, izmantojot OpenID Connect ar labi uzturētu autentifikācijas bibliotēku — nerakstīt OAuth plūsmu pašam.”
- „Izmanto autorizācijas koda plūsmu ar PKCE un pārbaudi
stateparametru.” - „Nolasi klienta ID un klienta noslēpumu no vides mainīgajiem serverī.”
- „Pieprasi tikai vajadzīgos tvērumus: tikai lasāmu kalendāra piekļuvi.”
- „Pastāsti man katru pāradresācijas URL, kas jāreģistrē nodrošinātāja konsolē — priekšskatījumam, publicētajam URL un manam pielāgotajam domēnam.”
- „Glabā atjaunošanas marķierus datubāzē šifrētus un apstrādā beigušos vai atsauktos marķierus, lūdzot lietotājam atkal savienoties.”
- „Ļauj lietotājiem atvienot integrāciju no sava iestatījumu lapas.”
OAuth un Mythex
Mythex nav iebūvētas galalietotāju pieteikšanās lietotnēm, ko veido; tā dokumentācija apraksta pašu atnestu pieeju — izvēlies autentifikācijas bibliotēku vai hostētu nodrošinātāju, glabā tā atslēgas kā projekta noslēpumus, un aģents raksta kodu. Pievienot autentifikāciju receptē ir sākuma uzvedne šim nolūkam. OAuth sastapsies arī pašā Mythex: vari pierakstīties ar Google, GitHub savienošana repozitorija sinhronizācijai izmanto GitHub OAuth, un MI klienti, kas savienojas ar Mythex caur MCP, iet caur OAuth piekrišanas lapu. Plašāk skat. kas ir autentifikācija un kas ir divfaktoru autentifikācija.
Jautājumi
Kas ir OAuth vienkāršos vārdos?
OAuth ir standarta veids, kā lietotājs var ļaut vienai lietotnei piekļūt viņa kontam citā pakalpojumā — piemēram, ļaut plānošanas lietotnei lasīt viņa Google kalendāru — bez paroles nodošanas šai lietotnei. Lietotājs apstiprina konkrētas atļaujas, un lietotne saņem marķieri, ko var izmantot tikai tām.
Vai OAuth ir tas pats, kas „Pierakstīties ar Google”?
„Pierakstīties ar Google” balstās uz OAuth 2.0 un OpenID Connect — slāni virs OAuth, kas pievieno standarta veidu, kā pateikt lietotnei, kas ir lietotājs. Pats OAuth attiecas uz piekļuves piešķiršanu; OpenID Connect ir tas, kas to pārvērš pieteikšanās procesā.
Kas ir OAuth piekļuves marķieris?
Piekļuves marķieris ir pilnvara, ko lietotne nosūta pakalpojuma API, lai pierādītu, ka tai ir piešķirta piekļuve. Parasti tas ir īslaicīgs un aprobežots ar atļaujām (tvērumiem), ko lietotājs apstiprināja. Atjaunošanas marķieris, ja tas izdots, ļauj lietotnei saņemt jaunus piekļuves marķierus, neprasot lietotājam vēlreiz.
Ko nozīmē redirect_uri_mismatch?
Tas nozīmē, ka atzvanīšanas URL, ko lietotne nosūtīja pieteikšanās laikā, precīzi nesakrīt ar vienu no nodrošinātāja izstrādātāju konsolē reģistrētajiem. Pievieno precīzo URL — ieskaitot https, domēnu, ceļu un jebkuru slīpsvītru beigās — katrai adresei, kur tava lietotne darbojas.
Vai OAuth ir drošs?
OAuth 2.0 ir plaši izmantots un drošs, ja to ieviesti pareizi: lieto autorizācijas koda plūsmu ar PKCE, precīzus pāradresācijas URL, state parametru un saglabā klienta noslēpumu un marķierus serverī. Lielākā daļa problēmu rodas no ieviešanas saīsinājumiem, tāpēc ieteicams izmantot labi uzturētu bibliotēku.