Vadovai

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:

  1. 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.
  2. 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:

  1. Spustelėjimas. Vartotojas spusteli „Prijungti Google kalendorių“.
  2. 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ą.
  3. 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.
  4. Grįžimas su kodu. Google nukreipia naršyklę atgal į programėlės nukreipimo URI su trumpu, vienkartiniu autorizacijos kodu.
  5. 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ą).
  6. 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ą atsakoPavyzdys
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ąvokaReikšmė
Teikėjas / autorizacijos serverisPaslauga, kurioje vartotojas prisijungia ir suteikia prieigą – Google, Microsoft, GitHub.
KlientasJūsų programėlė, užregistruota pas teikėją.
Kliento IDViešas jūsų programėlės identifikatorius pas teikėją.
Kliento slaptažodisPrivatus 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 ekranasPuslapis, kuriame vartotojas mato ir patvirtina prašomus leidimus.
Nukreipimo URI / grįžimo URLKur teikėjas nukreipia vartotoją atgal. Turi būti iš anksto užregistruotas ir tiksliai sutapti.
Prieigos žetonasTrumpalaikis įgaliojimas kviesti API.
Atnaujinimo žetonasIlgalaikis įgaliojimas gauti naujus prieigos žetonus. Saugokite jį kaip slaptažodį.
ID žetonasOIDC žetonas, pasirašytas, aprašantis, kas yra vartotojas.
PKCEPapildomas patikrinimas („įrodymo raktas“), neleidžiantis panaudoti perimto kodo. Rekomenduojamas visiems klientams.
stateAtsitiktinė 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 state parametrą.“
  • „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ą.

Mythex · Pricing · Kurkite bet ką su dirbtiniu intelektu · Svetainių ir programėlių šablonai · Mythex palyginimas · Programėlių kūrimo su dirbtiniu intelektu žodynėlis · Nemokami programėlių kūrimo su dirbtiniu intelektu įrankiai · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)