For en webside, der findes, men som en bruger, der ikke har tilstrækkelige rettigheder (han/hun er ikke logget ind eller tilhører ikke den rette brugergruppe), hvad er det korrekte HTTP-svar, der skal serveres? 401? 403? Noget andet? Det, jeg har læst om hver af dem indtil videre, er ikke særlig klart, hvad forskellen mellem de to er. Hvilke anvendelsestilfælde er passende for hvert svar?
En klar forklaring fra Daniel Irvine:
Der er et problem med 401 Unauthorized, HTTP-statuskoden for autentifikationsfejl. Og det er netop det: det er til autentificering, ikke autorisation. At modtage et 401-svar er at serveren fortæller dig, "du er ikke ikke er autentificeret - enten slet ikke autentificeret eller autentificeret forkert - men du bedes genautentificere dig og prøve igen." For at hjælpe dig, den vil altid indeholde en WWWW-Authenticate header, der beskriver, hvordan hvordan du skal autentificere.
Dette er et svar, der normalt returneres af din webserver, ikke af din web program.
Det er også noget meget midlertidigt; serveren beder dig om at prøve at igen.
Så til godkendelse bruger jeg 403 Forbidden-svaret. Det er permanent, det er bundet til min applikationslogik, og det er et mere konkret svar end et 401.
Når du modtager et 403-svar, fortæller serveren dig: "Jeg beklager. I know hvem du er - jeg tror på, hvem du siger, du er - men du har bare ikke tilladelse til at få adgang til denne ressource. Måske hvis du spørger systemet systemadministrator pænt, får du måske tilladelse. Men du skal ikke gide mig igen, før din situation ændrer sig."
Sammenfattende kan man sige, at et 401 Uautoriseret-svar bør bruges til manglende eller dårlig godkendelse, og et 403 Forbidden-svar bør bruges bagefter, når brugeren er autentificeret, men ikke er autoriseret til at udføre den ønskede operation på den givne ressource.
Endnu et flot billedformat af, hvordan http-statuskoder bør anvendes.
[]]3
Se RFC2616:
401 Uautoriseret:
Hvis anmodningen allerede indeholdt autorisationsoplysninger, angiver 401-svaret, at autorisationen er blevet afvist for disse oplysninger.
403 Forbidden:
Serveren har forstået anmodningen, men nægter at imødekomme den.
opdatering
Ud fra din brugssag ser det ud til, at brugeren ikke er autentificeret. Jeg ville returnere 401.
I henhold til RFC 2616 (HTTP/1.1) sendes 403 når:
Serveren har forstået anmodningen, men nægter at opfylde den. Autorisering hjælper ikke, og anmodningen BØR IKKE gentages. Hvis anmodningsmetoden ikke var HEAD, og serveren ønsker at offentliggøre, hvorfor anmodningen ikke er blevet opfyldt, SKAL den beskrive årsagen til afslaget i entiteten. Hvis serveren ikke ønsker at gøre disse oplysninger tilgængelige for klienten, kan statuskoden 404 (Not Found) anvendes i stedet
Med andre ord, hvis klienten KAN få adgang til ressourcen ved at autentificere sig, skal 401 sendes.