POVJERLJIVOST. HTTP AUTENTIKACIJA
Većina web aplikacija autentikaciju korisnika provodi kroz jednostavnu komunikaciju izmedu klijenta i poslužitelja. Klijent je tipično web preglednik,
a autentikacija se provodi razmjenom korisničkog imena i lozinke. Korisnik
se autenticira kako bi mogao pristupiti zaštićenim sredstvima unutar web
aplikacije. Najoćenitije rečeno, sredstvo je jedinstveno odredeno svojim
URL-om, a pristup sredstvu obavlja se HTTP protokolom.
Klijent započinje komunikaciju slanjem zahtjeva za autentikaciju uz korisničko ime i lozinku prema poslužitelju. Poslužitelj provjerava ispravnost primljenih podataka i u slučaju da podaci ispravno identificiraju nekog korisnika aplikacije, otvara korisničku sjednicu i klijentu šalje identifikator sjednice. Klijent uz preostale zahtjeve poslužitelju šalje i dobiveni identifikator sjednice.
HTTP Autentikacija
HTTP je protokol bez stanja, što znači da svaki HTTP zahtjev koji web poslužitelj primi je neovisan; poslužitelj ne čuva nikakve informacije o zahtjevima između dvije transakcije. To predstavlja izazov za web aplikacije koje trebaju pratiti stanje korisnika kroz višestruke zahtjeve, poput autentikacije korisnika ili održavanja korisničke sesije u web trgovini.
Stoga aplikacije moraju dodati podršku za sesije kako bi mogle zapamtiti što je korisnik učinio u prethodnim zahtjevima.
HTTP nema odredbe za autorizaciju
Programeri, odgovorni za razvoj i održavanje aplikacija, često nemaju dovoljno privilegija da rade bilo što vezano uz web poslužitelje, koje održavaju administratori sustava.
To je potaknulo programere da pribjegnu korištenju tehnika provjere autentičnosti koje mogu kontrolirati.
HTTP autentikacija je mehanizam koji se koristi za kontrolu pristupa web resursima, omogućavajući web serverima da zatraže od korisnika da se autentificiraju prije pružanja pristupa određenim resursima.
Postoje različiti tipovi HTTP autentikacije, od kojih su najčešći Osnovna autentikacija (Basic authentication) i Digest autentikacija. Ovdje je kratki pregled kako rade i kako se razlikuju:
Osnovna autentikacija (Basic authentication)
Koristi standardni HTTP zaglavlje Authorization
u kojem se šalje korisničko ime i lozinka odvojeni dvotočkom i kodirani u Base64 formatu.
Vrlo je jednostavna za implementaciju, ali pruža slabu sigurnost jer korisnički podaci nisu šifrirani, što ih čini ranjivim na presretanje ako se ne koristi zajedno s HTTPS.
Primjer zaglavlja: Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
, gdje je “dXNlcm5hbWU6cGFzc3dvcmQ=” Base64 kodirana kombinacija korisničkog imena i lozinke.
Digest autentikacija (sažetkom)
Unaprjeđenje u odnosu na osnovnu autentikaciju s obzirom na sigurnost. Koristi MD5 sažetak korisničkog imena, lozinke i drugih informacija za stvaranje šifriranog sažetka (hash) koji se šalje serveru.
Za razliku od osnovne autentikacije, lozinka nije poslana “u čistom” formatu, što otežava napadačima da je otkriju.
Kompleksnija je za implementaciju i zahtijeva više resursa za procesiranje zbog potrebe za kriptografskim računanjima.
Glavna svrha Digest autentifikacije je omogućiti provjeru autentičnosti bez slanja korisničkih vjerodajnica poslužitelju u otvorenom tekstu.
Umjesto toga, poslužitelj šalje klijentu izazov (engl. challenge)
Klijent odgovara na izazov izračunavanjem sažetka (engl. hash) izazova i lozinke i šalje sažetak natrag na poslužitelj.
Poslužitelj koristi odgovor (engl. response) kako bi utvrdio posjeduje li klijent ispravnu lozinku.
Implementacija
Da bi se implementirala HTTP autentikacija na web serveru, administratori moraju konfigurirati svoje servere (npr., Apache, Nginx) da zahtijevaju autentikaciju za pristup određenim direktorijima ili resursima. Klijenti koji pristupaju zaštićenim resursima morat će unijeti svoje vjerodajnice, koje će zatim browser automatski slati u odgovarajućem formatu za svaki zahtjev prema tim resursima.
I jedan i drugi mehanizam ugrađeni su u HTTP protokol i definirani su u RFC 2617, “HTTP Authentication: Basic and Digest Access Authentication” (http://www.ietf.org/rfc/rfc2617.txt).
Autentikacija temeljena na formularu (Form-based authentication)
Provjera autentičnosti na temelju obrasca je način premještanja problema provjere autentičnosti s web poslužitelja na aplikaciju.
Autentikacija temeljena na formularu (Form-based authentication) jedna je od najčešćih metoda autentikacije na webu. Ova metoda koristi HTML formu za prikupljanje korisničkih podataka, kao što su korisničko ime i lozinka. Nakon što korisnik unese svoje podatke u formu, informacije se šalju web poslužitelju, obično putem POST zahtjeva. Poslužitelj zatim provjerava te podatke protiv svoje baze podataka ili drugog mehanizma pohrane kako bi potvrdio identitet korisnika. Ako su podaci valjani, korisniku se omogućuje pristup zaštićenim područjima ili funkcionalnostima web stranice.
Evo ključnih značajki i koraka u procesu Form-based autentikacije:
- Prikupljanje korisničkih podataka: Korisnik unosi svoje vjerodajnice (korisničko ime i lozinka) u formu na web stranici.
- Slanje podataka: Nakon unosa, podaci se šalju web poslužitelju putem HTTP POST zahtjeva. Iako se podaci mogu poslati u neenkriptiranom obliku, većina web stranica koristi HTTPS za enkripciju podataka tijekom prijenosa, što pruža dodatni sloj sigurnosti.
- Provjera autentičnosti: Poslužitelj provjerava pristigle podatke protiv svoje baze podataka korisnika. Ovaj korak uključuje usporedbu unesenih podataka s pohranjenim vjerodajnicama. Lozinke se obično pohranjuju u bazi podataka u hashiranom obliku za dodatnu sigurnost.
- Autorizacija i sesija: Ako su vjerodajnice ispravne, poslužitelj kreira sesiju za korisnika i šalje natrag odgovor koji obično uključuje cookie sa sesijskim identifikatorom. Ovaj cookie se koristi za identifikaciju korisnika u daljnjim zahtjevima, omogućujući mu pristup zaštićenim područjima stranice bez potrebe za ponovnom autentikacijom.
- Upravljanje sesijom: Sesija omogućuje web stranici da održava stanje korisnika tijekom navigacije po stranici. Sesija se obično završava odjavom korisnika ili istekom nakon određenog perioda neaktivnosti.
Form-based autentikacija popularna je zbog svoje jednostavnosti i lakoće implementacije. Međutim, važno je primijeniti najbolje prakse sigurnosti, kao što su korištenje HTTPS-a za enkripciju podataka i pohrana hashiranih lozinki, kako bi se osigurala zaštita korisničkih podataka.
OAuth
OAuth je otvoreni standard za autorizaciju koji omogućuje siguran API pristup između aplikacija bez potrebe za dijeljenjem vjerodajnica, poput korisničkog imena i lozinke. Osnovna ideja je da korisnici daju aplikacijama “token” (žeton) koji im daje određena prava pristupa, umjesto da izravno dijele svoje vjerodajnice. To znači da aplikacije mogu pristupiti korisničkim resursima na drugim servisima u njihovo ime, pod uvjetima koje korisnik odobri, bez potrebe za znati njihove vjerodajnice.
Evo ključnih komponenti i koraka u OAuth procesu:
- Korisnik – vlasnik resursa koji daje dopuštenje za pristup svojim podacima.
- Klijent – aplikacija koja želi pristupiti korisničkim podacima na drugom servisu.
- Poslužitelj za autorizaciju – servis koji autentificira korisnika i izdaje token klijentu nakon što korisnik odobri pristup.
- Resursni poslužitelj – servis koji hosta korisničke podatke i omogućuje pristup tim podacima kada je predstavljen valjani token.
Proces obično uključuje sljedeće korake:
- Registracija klijenta: Prije nego što može koristiti OAuth, aplikacija se mora registrirati kod poslužitelja za autorizaciju kako bi dobila klijentski ID i tajnu.
- Zahtjev za autorizaciju: Kada korisnik želi omogućiti aplikaciji pristup svojim podacima, aplikacija ga preusmjerava na poslužitelj za autorizaciju. Ovdje korisnik daje svoj pristanak da aplikacija pristupa njegovim podacima.
- Dobivanje tokena: Nakon što korisnik odobri pristup, poslužitelj za autorizaciju izdaje token aplikaciji. Token sadrži informacije o opsegu pristupa koji je odobren.
- Pristup resursima: Aplikacija zatim koristi dobiveni token za pristup korisničkim podacima na resursnom poslužitelju.
- Osvježavanje tokena: Tokeni mogu isteći. U tom slučaju, aplikacija može koristiti osvježavajući token koji je dobila zajedno s pristupnim tokenom za zahtjevanje novog pristupnog tokena bez potrebe za ponovnim autentificiranjem korisnika.
OAuth se koristi u raznim aplikacijama, uključujući pristupanje online servisima poput društvenih mreža, bankarstva, elektroničke pošte i skladištenja podataka, omogućujući korisnicima da sigurno dijele svoje podatke s trećim aplikacijama bez kompromitiranja svojih vjerodajnica.
Iako se često koristi u kontekstu autentikacije, OAuth primarno omogućava autoriziranim aplikacijama siguran delegirani pristup korisničkim resursima koji su pohranjeni na drugim servisima, bez potrebe za dijeljenjem vjerodajnica (npr., korisničkog imena i lozinke).
Evo ključnih razlika između OAuth i metoda autentikacije poput form-based autentikacije, osnovne (basic) autentikacije i digest autentikacije:
- Svrha i fokus:
- Tradicionalne metode autentikacije usredotočene su na potvrđivanje identiteta korisnika prije omogućavanja pristupa resursima ili servisima.
- OAuth se fokusira na autorizaciju aplikacija za pristup korisničkim resursima na drugim servisima bez otkrivanja korisničkih vjerodajnica aplikaciji.
- Flows i mehanizmi:
- Tradicionalne metode obično uključuju izravan unos korisničkih vjerodajnica (npr., kroz formu ili HTTP zaglavlje) koje servis provjerava protiv svoje baze podataka.
- OAuth koristi “tokens” (žetone) koji aplikacijama omogućavaju pristup u ime korisnika. Proces uključuje više koraka: registraciju aplikacije za dobivanje klijentskog ID-a, preusmjeravanje korisnika na servis za autentikaciju, korisnikov pristanak na delegirani pristup, te izdavanje žetona aplikaciji koja zatim koristi taj žeton za pristup resursima.
- Sigurnost:
- Tradicionalne metode mogu biti ranjive ako se korisničke vjerodajnice presretnu ili kompromitiraju.
- OAuth pruža višu razinu sigurnosti jer korisničke vjerodajnice nikada nisu izložene trećoj strani. Umjesto toga, koristi se žeton koji se može ograničiti na određene tipove pristupa i može se povući od strane korisnika u bilo kojem trenutku bez potrebe za promjenom korisničkih vjerodajnica.
- Upotreba i implementacija:
- Tradicionalne metode često se koriste za direktan pristup web aplikacijama ili mrežnim servisima.
- OAuth se široko koristi u modernim web aplikacijama i API-ima, posebno kada aplikacije trećih strana trebaju pristupiti korisničkim podacima na popularnim platformama poput društvenih mreža, e-mail servisa i skladišnih servisa, uz očuvanje privatnosti i sigurnosti korisničkih podataka.
Ukratko, dok su tradicionalne metode autentikacije usmjerene na potvrđivanje identiteta korisnika, OAuth se bavi sigurnim delegiranjem pristupa resursima između različitih servisa i aplikacija.