Sobes.tech
Middle

Kas yra OAuth autentifikacija ir kaip ji veikia?

sobes.tech AI

Atsakymas iš AI

OAuth — tai atviro standarto autorizacijos protokolas. Jis leidžia vartotojui suteikti trečiajai šaliai ribotą prieigą prie savo duomenų, kurie saugomi kitame serveryje (resursų serveryje), be būtinybės perduoti savo prisijungimo duomenis (vartotojo vardas/slaptažodis) šiai programai.

OAuth veikimas pagrįstas "prieigos žetonų" išdavimu vietoje prisijungimo duomenų. Tipinis srautas atrodo taip:

  1. Autorizacijos užklausa: Vartotojas bando atlikti veiksmą trečiosios šalies programoje, kuri reikalauja prieigos prie resursų serverio duomenų. Programa inicijuoja autorizacijos užklausą resursų serverio autorizacijos serveriui.
  2. Peradresavimas į autorizacijos serverį: Vartotojas nukreipiamas į autorizacijos serverio puslapį.
  3. Vartotojo autentifikavimas: Vartotojas autentikuojasi autorizacijos serveryje (jei dar nėra).
  4. Vartotojo sutikimas (Consent): Autorizacijos serveris prašo vartotojo leidimo suteikti tam tikrą prieigos lygį prie savo duomenų (scopes). Vartotojas arba sutinka, arba atmeta užklausą.
  5. Autorizacijos kodo išdavimas: Jei vartotojas sutinka, autorizacijos serveris nukreipia vartotoją atgal į trečiosios šalies programą ir suteikia "autorizacijos kodą".
  6. Kodo keitimas į prieigos žetoną: Trečiosios šalies programa, gavusi kodą, tiesiogiai siunčia užklausą autorizacijos serveriui, kad šis keistų kodą į "prieigos žetoną" (Access Token) ir, jei reikia, "atnaujinimo žetoną" (Refresh Token). Šis užklausimas vyksta tarp serverių, be vartotojo naršyklės dalyvavimo, tai didina saugumą.
  7. Prieiga prie duomenų: Trečiosios šalies programa naudoja gautą prieigos žetoną, kad atliktų užklausas resursų serveriui vartotojo vardu. Kiekvienas toks užklausas siunčiama su žetonu antraštėje.
  8. Žetono validacija: Resursų serveris patikrina prieigos žetoną ir, jei jis galioja ir atitinka reikalaujamus scope, suteikia prieigą prie duomenų.

OAuth siūlo keletą srautų (flows), kurie tinka skirtingiems scenarijams, pavyzdžiui:

  • Authorization Code Flow: Labiausiai saugus, naudojamas interneto programoms su serverio dalimi.
  • Implicit Flow: Pasenęs, naudotas interneto programoms be serverio dalies.
  • Client Credentials Flow: Programoms, kurios gauna prieigą prie savo resursų, o ne vartotojo duomenų.
  • Resource Owner Password Credentials Flow: Nerekomenduojama, perduodant vartotojo prisijungimo duomenis programai.

(Pavyzdys — Authorization Code Flow)

C# kalboje OAuth įgyvendinimui dažnai naudojamos bibliotekos, tokios kaip ASP.NET Core Identity su įvairiais tiekėjais (Google, Facebook ir kt.), arba IdentityServer bibliotekos savo autorizacijos serverio kūrimui.