Sobes.tech
Middle

Šta je OAuth autentifikacija i kako funkcioniše?

sobes.tech АИ

Одговор од АИ

OAuth je otvoreni standard za autorizaciju. Omogućava korisniku da pruži ograničen pristup svojim podacima koji se nalaze na drugom servisu (resursnom serveru), bez potrebe da prosleđuje svoje akreditive (korisničko ime/lozinka) toj aplikaciji.

Rad OAuth-a zasniva se na izdavanju "tokena za pristup" umesto akreditiva. Tipičan tok izgleda ovako:

  1. Zahtev za autorizaciju: Korisnik pokušava da izvrši radnju u trećoj aplikaciji koja zahteva pristup podacima sa resursnog servera. Aplikacija inicira zahtev za autorizaciju ka serveru za autorizaciju resursnog servera.
  2. Preusmeravanje na server za autorizaciju: Korisnik je preusmeren na stranicu servera za autorizaciju.
  3. Autentikacija korisnika: Korisnik se autentifikuje na serveru za autorizaciju (ako već nije).
  4. Slažem se korisnik (Consent): Server za autorizaciju traži od korisnika dozvolu za pružanje određenog nivoa pristupa njegovim podacima (scopes). Korisnik ili pristaje ili odbija zahtev.
  5. Izdavanje koda za autorizaciju: Ako se korisnik slaže, server za autorizaciju preusmerava korisnika nazad u treću aplikaciju, dajući "kod za autorizaciju".
  6. Zamena koda za autorizaciju za pristupni token: Treća aplikacija, koja je dobila kod za autorizaciju, direktno šalje zahtev serveru za autorizaciju da zameni taj kod za "pristupni token" (Access Token) i opcionalno "osvežavajući token" (Refresh Token). Ovaj zahtev se vrši između servera, bez učešća korisničkog pretraživača, čime se povećava sigurnost.
  7. Pristup podacima: Treća aplikacija koristi dobijeni pristupni token za izvršavanje zahteva ka resursnom serveru u ime korisnika. Pri svakom takvom zahtevu, token se šalje u zaglavlju.
  8. Validacija tokena: Resursni server validira pristupni token i, ako je validan i odgovara traženim scope-ovima, omogućava pristup podacima.

OAuth ima nekoliko tokova (flows), pogodni za različite scenarije, na primer:

  • Authorization Code Flow: Najsigurniji, koristi se za web aplikacije sa serverskom stranom.
  • Implicit Flow: Zastarjel, koristio se za web aplikacije bez serverske strane.
  • Client Credentials Flow: Za aplikacije koje pristupaju sopstvenim resursima, a ne korisničkim.
  • Resource Owner Password Credentials Flow: Ne preporučuje se, prenosi korisničke akreditive aplikaciji.

(Primer Authorization Code Flow)

U C# za implementaciju OAuth u web aplikacijama često se koriste biblioteke poput ASP.NET Core Identity sa različitim provajderima (Google, Facebook itd.), ili biblioteke IdentityServer za kreiranje sopstvenog servera za autorizaciju.