Voor een webpagina die bestaat, maar waarvoor een gebruiker die niet voldoende rechten heeft, (ze zijn niet ingelogd of behoren niet tot de juiste gebruikersgroep), wat is de juiste HTTP-reactie om te serveren? 401? 403? Iets anders? Wat ik tot nu toe over beide heb gelezen is niet erg duidelijk over het verschil tussen de twee. Welke gebruikssituaties zijn geschikt voor elk antwoord?
Een duidelijke uitleg van Daniel Irvine:
Er's een probleem met 401 Unauthorized, de HTTP-statuscode voor authenticatiefouten. En dat is het nu juist: het is voor authenticatie, niet voor autorisatie. Als je een 401 antwoord krijgt, vertelt de server je, "je bent niet geauthenticeerd- ofwel helemaal niet geauthenticeerd of geauthenticeerd maar verifieer opnieuw en probeer het opnieuw." Om u te helpen, zal het altijd een WW-Authenticate header bevatten die beschrijft hoe te authenticeren.
Dit is een antwoord dat over het algemeen door uw webserver wordt teruggegeven, niet uw web applicatie.
Het is ook iets heel tijdelijks; de server vraagt u om het opnieuw te proberen.
Dus, voor authorisatie gebruik ik de 403 Forbidden response. Het is permanent, het is gebonden aan mijn applicatie logica, en het is een meer concrete antwoord dan een 401.
Het ontvangen van een 403 antwoord is de server die je verteld, "Het spijt me. Ik weet wie u bent-ik geloof wie u zegt dat u bent-maar u heeft geen toestemming om deze bron te openen. Misschien als je het de systeembeheerder beheerder vriendelijk vraagt, u toestemming krijgt. Maar val me alsjeblieft niet meer lastig totdat uw situatie is veranderd."
Samengevat, een 401 Unauthorized antwoord moet worden gebruikt voor ontbrekende of slechte authenticatie, en een 403 Forbidden antwoord moet worden gebruikt daarna, als de gebruiker is geauthenticeerd maar niet gemachtigd is om de gevraagde bewerking uit te voeren op de gegeven bron.
Nog een mooi picturaal formaat van hoe http status codes moeten worden gebruikt.
Zie RFC2616:
401 Niet geautoriseerd:
Als het verzoek al autorisatiegegevens bevatte, dan geeft het 401 antwoord aan dat autorisatie is geweigerd voor die gegevens.
403 Verboden:
De server heeft het verzoek begrepen, maar weigert het uit te voeren.
**Update.
Uit je use case blijkt dat de gebruiker niet geauthenticeerd is. Ik zou 401 terugsturen.
Volgens RFC 2616 (HTTP/1.1) wordt 403 verzonden wanneer:
De server heeft het verzoek begrepen, maar weigert het te vervullen. Autorisatie zal niet helpen en het verzoek ZOU NIET herhaald MOETEN worden. Als de verzoekmethode niet HEAD was en de server openbaar wenst te maken waarom het verzoek niet is ingewilligd, DIENT hij de reden voor de weigering in de entiteit te beschrijven. Indien de server deze informatie niet aan de client ter beschikking wenst te stellen, kan in plaats daarvan de statuscode 404 (Not Found) worden gebruikt
Met andere woorden, als de client toegang KAN krijgen tot de bron door zich te authenticeren, moet 401 worden verstuurd.