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:
- 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.
- Peradresavimas į autorizacijos serverį: Vartotojas nukreipiamas į autorizacijos serverio puslapį.
- Vartotojo autentifikavimas: Vartotojas autentikuojasi autorizacijos serveryje (jei dar nėra).
- 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ą.
- Autorizacijos kodo išdavimas: Jei vartotojas sutinka, autorizacijos serveris nukreipia vartotoją atgal į trečiosios šalies programą ir suteikia "autorizacijos kodą".
- 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ą.
- 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.
- Ž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.