Kas yra OAuth? „Prisijungti su Google“ ir deleguota prieiga paaiškinta
OAuth yra atviras standartas, leidžiantis vartotojui suteikti vienai programėlei ribotą prieigą prie jo paskyros kitoje paslaugoje, neperduodant slaptažodžio. Kai spustelite „Prijungti Google kalendorių“ ir matote ekraną „Leisti šiai programėlei matyti jūsų įvykius?“, tai yra OAuth. Programėlė gauna žetoną tik tam, ką patvirtinote, ir tai bet kada galite atšaukti. Tas pats mechanizmas, papildytas sluoksniu OpenID Connect, veikia ir mygtukuose „Prisijungti su Google“ bei panašiuose.
Kodėl OAuth svarbus kuriant su DI
OAuth kuriant programėlę pasirodo dviem dažniausiais atvejais:
- Socialinis prisijungimas. Norite, kad vartotojai galėtų „Prisijungti su Google“ (arba Apple, Microsoft, GitHub), o ne kurtų dar vieną slaptažodį. Žr. kaip pridėti prisijungimą prie programėlės.
- Prisijungimas prie vartotojų paskyrų kitose paslaugose. Programėlei reikia skaityti vartotojo kalendorių, skelbti jo socialinio tinklo paskyroje, gauti failus iš debesies disko arba sinchronizuoti buhalterijos duomenis.
Abiem atvejais DI kūrėjas gali parašyti kodą, bet kai kuriuos žingsnius gali atlikti tik jūs: sukurti kūrėjo programėlę pas teikėją, gauti kliento ID ir kliento slaptažodį (client secret), užregistruoti grįžimo URL ir, kai kuriems leidimams, išlaikyti teikėjo peržiūrą. Žinojimas, kaip veikia OAuth, daro šiuos žingsnius ir jų klaidas daug mažiau paslaptingus. Platesnį prisijungimo vaizdą rasite kas yra autentifikacija.
Kasdienė analogija
Pagalvokite apie viešbučio kortelę. Registruojantis recepcija patikrina, kas esate, ir duoda kortelę, kuri atidaro jūsų kambarį ir sporto salę – ne kitus kambarius, ne personalo zonas – ir nustoja veikti išsiregistravus. Kortelėje nėra jūsų paso. Jei ją pamestumėte, recepcija ją panaikina ir išduoda naują.
- Recepcija – autorizacijos serveris (Google prisijungimo puslapis).
- Jūsų tapatybės patikrinimas – jūs prisijungiate prie Google.
- Kortelė – prieigos žetonas.
- „Tik kambarys ir sporto salė“ – leidimai (scopes), kuriuos patvirtinote.
- Išsiregistravimas – žetono galiojimo pabaiga arba jūsų atšaukta prieiga.
Programėlė, kuria naudojatės, niekada nemato jūsų Google slaptažodžio – tik kortelę.
Kaip veikia OAuth, žingsnis po žingsnio
Dažniausias žiniatinklio programėlių srautas yra autorizacijos kodo srautas. Štai kas nutinka, kai vartotojas prijungia savo Google kalendorių prie planavimo programėlės:
- Spustelėjimas. Vartotojas spusteli „Prijungti Google kalendorių“.
- Nukreipimas į teikėją. Programėlė siunčia naršyklę į Google su savo kliento ID, norimais leidimais (skaityti kalendoriaus įvykius) ir nukreipimo URI – adresu, į kurį Google grąžins vartotoją.
- Prisijungimas ir sutikimas. Vartotojas prisijungia prie Google (jei dar nėra prisijungęs) ir mato sutikimo ekraną su tuo, ko prašo programėlė. Spusteli Leisti.
- Grįžimas su kodu. Google nukreipia naršyklę atgal į programėlės nukreipimo URI su trumpu, vienkartiniu autorizacijos kodu.
- Keitimas serveryje. Programėlės serveris siunčia tą kodą kartu su savo kliento slaptažodžiu tiesiai Google ir gauna prieigos žetoną (dažnai ir atnaujinimo žetoną).
- API naudojimas. Serveris su prieigos žetonu kviečia Google Calendar API ir gauna vartotojo įvykius.
Grįžimo iškvietimas 4 žingsnyje atrodo maždaug taip:
https://yourapp.com/auth/google/callback?code=4/0Adeu5B...&state=x7Kq9
O žetono atsakymas 5 žingsnyje yra JSON panašus į šį:
{
"access_token": "ya29.a0Af...",
"expires_in": 3599,
"refresh_token": "1//0gL...",
"scope": "https://www.googleapis.com/auth/calendar.readonly",
"token_type": "Bearer"
}
Svarbi dizaino mintis: žetono keitimas vyksta serveris–serveris, todėl kliento slaptažodžiui ir žetonams nereikia keliauti per naršyklę.
OAuth, OpenID Connect ir jūsų pačių prisijungimas
| Į ką atsako | Pavyzdys | |
|---|---|---|
| OAuth 2.0 | „Ką ši programėlė gali daryti vartotojo vardu?“ (autorizacija) | Skaityti vartotojo kalendorių |
| OpenID Connect (OIDC) | „Kas tas vartotojas?“ (autentifikacija), sukurta ant OAuth | „Prisijungti su Google“, grąžinantis patvirtintą el. paštą |
| Jūsų pačių prisijungimas | „Ar tai teisingas šios paskyros slaptažodis?“ | El. paštas ir slaptažodis (užmaišytas) jūsų duomenų bazėje |
Daugelis programėlių juos sujungia: prisijungimas el. paštu ir slaptažodžiu, „Prisijungti su Google“ per OIDC ir atskiri OAuth ryšiai su kitomis paslaugomis.
Pagrindinės sąvokos
| Sąvoka | Reikšmė |
|---|---|
| Teikėjas / autorizacijos serveris | Paslauga, kurioje vartotojas prisijungia ir suteikia prieigą – Google, Microsoft, GitHub. |
| Klientas | Jūsų programėlė, užregistruota pas teikėją. |
| Kliento ID | Viešas jūsų programėlės identifikatorius pas teikėją. |
| Kliento slaptažodis | Privatus jūsų programėlės „slaptažodis“ pas teikėją. Tik serveriui. |
| Leidimas (scope) | Konkretus leidimas, pavyzdžiui, „skaityti kalendorių“ ar „matyti el. pašto adresą“. |
| Sutikimo ekranas | Puslapis, kuriame vartotojas mato ir patvirtina prašomus leidimus. |
| Nukreipimo URI / grįžimo URL | Kur teikėjas nukreipia vartotoją atgal. Turi būti iš anksto užregistruotas ir tiksliai sutapti. |
| Prieigos žetonas | Trumpalaikis įgaliojimas kviesti API. |
| Atnaujinimo žetonas | Ilgalaikis įgaliojimas gauti naujus prieigos žetonus. Saugokite jį kaip slaptažodį. |
| ID žetonas | OIDC žetonas, pasirašytas, aprašantis, kas yra vartotojas. |
| PKCE | Papildomas patikrinimas („įrodymo raktas“), neleidžiantis panaudoti perimto kodo. Rekomenduojamas visiems klientams. |
| state | Atsitiktinė reikšmė, apsaugantis srautą nuo suklastotų užklausų. |
Dažnos klaidingos nuomonės
- „OAuth yra prisijungimo sistema.“ Paprastas OAuth suteikia prieigą; tapatybę tvarko OpenID Connect. Nuogo prieigos žetono naudojimas kaip įrodymas, kas yra asmuo, yra sukėlęs tikrų saugumo klaidų.
- „Programėlė gauna mano slaptažodį.“ Niekada. Tam ir skirtas visas mechanizmas.
- „Prašyti daugiau leidimų nekenksminga.“ Vartotojai atsargiau žiūri į plačius prašymus, o teikėjai, pavyzdžiui, Google, gali reikalauti programėlės peržiūros jautriems ar ribotiems leidimams. Prašykite tik to, ko reikia.
- „Kliento slaptažodį galima dėti į priekinę dalį.“ Viskas naršyklės kode yra viešai matoma. Laikykite jį serverio pusės paslaptyse.
- „Veikia testavimo metu, vadinasi, veiks ir gamyboje.“ Teikėjai dažnai riboja nepatvirtintas programėles – pavyzdžiui, leidžia tik nurodytus testuotojus – o gyvo domeno nukreipimo URI reikia registruoti atskirai.
- „Žetonai galioja amžinai.“ Prieigos žetonai greitai baigia galioti, o vartotojai gali atšaukti prieigą. Programėlė turi tinkamai tvarkyti abu atvejus.
Ko klausti DI kūrėjo
- „Pridėk „Prisijungti su Google“ naudodamas OpenID Connect su gerai prižiūrima autentifikavimo biblioteka – nekurk OAuth srauto pats.“
- „Naudok autorizacijos kodo srautą su PKCE ir patikrink
stateparametrą.“ - „Kliento ID ir kliento slaptažodį nuskaityk iš aplinkos kintamųjų serveryje.“
- „Prašyk tik reikalingų leidimų: tik skaitymo prieiga prie kalendoriaus.“
- „Pasakyk, kuriuos nukreipimo URL reikia užregistruoti teikėjo konsolėje – peržiūrai, paskelbtam URL ir mano domenui.“
- „Atnaujinimo žetonus saugok užšifruotus duomenų bazėje, o pasibaigusius ar atšauktus tvarkyk prašydamas vartotojo prisijungti iš naujo.“
- „Leisk vartotojams atjungti integraciją savo nustatymų puslapyje.“
OAuth ir Mythex
Mythex neturi įmontuoto galutinių vartotojų prisijungimo jūsų kuriamoms programėlėms; jos dokumentacijoje aprašomas požiūris „atsinešk savo“ – pasirenkate autentifikavimo biblioteką ar talpinamą teikėją, jo raktus laikote kaip projekto paslaptis, o kodą parašo agentas. Autentifikacijos pridėjimo receptas turi pradinę užklausą tam. OAuth susidursite ir pačioje Mythex: prisijungti galite su Google, GitHub ryšiui saugojimui sinchronizuoti naudojamas GitHub OAuth, o DI klientai, jungiantys prie Mythex per MCP, eina per OAuth sutikimo puslapį. Daugiau – kas yra autentifikacija ir kas yra dviejų veiksnių autentifikacija.
Klausimai
Kas yra OAuth paprastais žodžiais?
OAuth yra standartinis būdas vartotojui leisti vienai programėlei pasiekti jo paskyrą kitoje paslaugoje – pavyzdžiui, leisti planavimo programėlei skaityti jo Google kalendorių – be to, kad ta programėlė gautų jo slaptažodį. Vartotojas patvirtina konkrečius leidimus, o programėlė gauna žetoną, kurį gali naudoti tik tiems leidimams.
Ar OAuth tas pats kaip „Prisijungti su Google“?
„Prisijungti su Google“ sukurtas ant OAuth 2.0 ir OpenID Connect – sluoksnio virš OAuth, kuris prideda standartinį būdą nurodyti programėlei, kas yra vartotojas. Pats OAuth yra apie prieigos suteikimą; OpenID Connect paverčia jį prisijungimu.
Kas yra OAuth prieigos žetonas?
Prieigos žetonas yra įgaliojimas, kurį programėlė siunčia paslaugos API, kad įrodytų, jog jai suteikta prieiga. Paprastai jis trumpalaikis ir apribotas leidimais (scopes), kuriuos patvirtino vartotojas. Atnaujinimo žetonas, jei išduotas, leidžia programėlei gauti naujus prieigos žetonus neklausiant vartotojo iš naujo.
Ką reiškia redirect_uri_mismatch?
Tai reiškia, kad grįžimo URL, kurį jūsų programėlė išsiuntė prisijungimo metu, tiksliai nesutampa su vienu iš teikėjo kūrėjo konsolėje užregistruotų. Pridėkite tikslų URL – įskaitant https, domeną, kelią ir galimą galinį brūkšnelį – kiekvienam adresui, kuriuo veikia jūsų programėlė.
Ar OAuth saugus?
OAuth 2.0 plačiai naudojamas ir yra saugus, jei įgyvendintas teisingai: naudojamas autorizacijos kodo srautas su PKCE, tikslūs nukreipimo URL, state parametras, o kliento slaptažodis ir žetonai laikomi serveryje. Dauguma problemų kyla dėl įgyvendinimo trumpinimų, todėl rekomenduojama naudoti gerai prižiūrimą biblioteką.