HTTP 401 pogreška u odnosu na HTTP 403 pogrešku - Objašnjeni odgovori na statusni kod

Prije smo detaljno obradili kôd pogreške 403 (zabranjeni) HTTP, ali također ima gotovo identičnu braću i sestre.

Dakle, koja je točno razlika između statusnih kodova 401 (neovlašteno) i 403 (zabranjeno)? Sigurno misle isto? Pogledajmo izbliza!

RFC standardi

Najsuvremeniji RFC standard koji definira 401 (neovlašteno) je RFC 7235

Statusni kod 401 (neovlašteno) označava da zahtjev nije primijenjen jer mu nedostaju valjane vjerodajnice za provjeru autentičnosti ciljnog resursa ... Korisnički agent MOŽE ponoviti zahtjev s novim ili zamijenjenim poljem zaglavlja autorizacije.

Dok je 403 (Zabranjeno) nedavno definirano u RFC 7231

Statusni kod 403 (zabranjeni) označava da je poslužitelj razumio zahtjev, ali ga odbija autorizirati ... Ako su u zahtjevu navedene vjerodajnice za provjeru autentičnosti, poslužitelj ih smatra nedovoljnima za odobravanje pristupa.

Uobičajeni uzroci

Kao što je spomenuto u prethodnom članku, do pogreške 403 može doći kada se korisnik prijavio, ali nema dovoljno privilegija za pristup traženom resursu. Na primjer, generički korisnik možda pokušava učitati 'admin' rutu.

S druge strane, najočitije je da ćete naići na pogrešku 401 kada se uopće niste prijavili ili ste dali netočnu lozinku.

To su dva najčešća uzroka za ovaj par pogrešaka.

Rjeđi uzroci

Ipak, postoje slučajevi u kojima to nije baš tako izravno.

Pogreške 403 mogu se pojaviti zbog ograničenja koja nisu u potpunosti ovisna o prijavljenim vjerodajnicama korisnika.

Na primjer, poslužitelj je možda zaključao određene resurse kako bi omogućio pristup samo iz unaprijed definiranog raspona IP adresa ili može koristiti geoblokiranje. Potonje se potencijalno može zaobići VPN-om.

Može doći do pogreške 401 čak i ako korisnik unese ispravne vjerodajnice. To je rijetko i možda je nešto s čime se stvarno susrećete samo dok razvijate vlastite ovjerene pozadine. Ali ako je zaglavlje autorizacije pogrešno oblikovano, vratit će se 401.

Na primjer, možda imate JWT (JSON Web Token) koji želite uključiti u zaglavlje zahtjeva, a koji očekuje format Authorization: Bearer eyJhbGci......yJV_adQssw5c. Ako biste prije JWT-a zaboravili riječ 'Nositelj', naletjet ćete na pogrešku 401.

I sam sam naišao na ovaj problem prilikom testiranja API-ja u razvoju s Postmanom i zaboravljanja točne sintakse za autorska zaglavlja!

To je to

Nadam se da će ovo razjasniti svaku zbrku oko ovih vrlo sličnih pogrešaka.

Ako vam je ovo korisno ili želite osporiti ili proširiti bilo što ovdje pokrenuto, slobodno me kontaktirajte na Twitteru @JacksonBates.