Was ist die richtige HTTP-Antwort für eine Webseite, die zwar existiert, für die aber ein Benutzer, der keine ausreichenden Rechte hat (er ist nicht angemeldet oder gehört nicht zur richtigen Benutzergruppe), bereitgestellt werden soll? 401? 403? Oder etwas anderes? Was ich bisher über die einzelnen Antworten gelesen habe, macht den Unterschied zwischen den beiden nicht deutlich. Welche Anwendungsfälle sind für jede Antwort geeignet?
Eine klare Erklärung von Daniel Irvine:
Es gibt ein Problem mit 401 Unauthorized, dem HTTP-Statuscode für Authentifizierungsfehler. Und genau das ist es: Er ist für die Authentifizierung, nicht für die Autorisierung. Eine 401-Antwort zu erhalten bedeutet, dass der Server Ihnen mitteilt, "Sie sind nicht nicht authentifiziert - entweder gar nicht oder falsch authentifiziert falsch authentifiziert, aber bitte authentifizieren Sie sich erneut und versuchen Sie es erneut." Um Ihnen weiterzuhelfen, wird immer ein WWW-Authenticate-Header eingefügt, der beschreibt, wie wie Sie sich authentifizieren.
Dies ist eine Antwort, die in der Regel von Ihrem Webserver zurückgegeben wird, nicht von Ihrer Webanwendung. Anwendung.
Es handelt sich auch um etwas sehr Vorläufiges; der Server bittet Sie, es erneut zu versuchen.
Für die Autorisierung verwende ich also die Antwort 403 Forbidden. Sie ist permanent, sie ist an meine Anwendungslogik gebunden und sie ist eine konkretere Antwort als eine 401.
Eine 403-Antwort bedeutet, dass der Server Ihnen mitteilt: "Es tut mir leid. Ich weiß Ich weiß, wer Sie sind - ich glaube, wer Sie sind -, aber Sie haben keine aber Sie haben keine Erlaubnis, auf diese Ressource zuzugreifen. Vielleicht, wenn Sie den System Systemadministrator nett fragen, bekommen Sie vielleicht die Erlaubnis. Aber bitte belästigen Sie mich nicht wieder, bis sich Ihre Lage ändert."
Zusammenfassend sollte eine 401 Unauthorized Antwort für fehlende oder schlechter Authentifizierung verwendet werden, und eine 403 Forbidden-Antwort sollte verwendet werden Antwort verwendet werden, wenn der Benutzer zwar authentifiziert, aber nicht berechtigt ist den angeforderten Vorgang auf der gegebenen Ressource durchzuführen.
Eine weitere schöne bildliche Darstellung, wie http-Statuscodes verwendet werden sollten.
Siehe RFC2616:
401 Unautorisiert:
Wenn die Anfrage bereits Autorisierungsdaten enthielt, zeigt die Antwort 401 an, dass die Autorisierung für diese Daten verweigert wurde.
403 Verboten:
Der Server hat die Anfrage verstanden, weigert sich aber, sie zu erfüllen.
Aktualisierung
Aus Ihrem Anwendungsfall geht hervor, dass der Benutzer nicht authentifiziert ist. Ich würde 401 zurückgeben.
Gemäß RFC 2616 (HTTP/1.1) wird 403 gesendet, wenn:
Der Server hat die Anfrage verstanden, weigert sich aber, sie zu erfüllen. Die Autorisierung hilft nicht weiter und die Anfrage SOLLTE NICHT wiederholt werden. Wenn die Anfragemethode nicht HEAD war und der Server bekannt geben möchte, warum die Anfrage nicht erfüllt wurde, SOLLTE er den Grund für die Ablehnung in der Entität beschreiben. Wenn der Server diese Information dem Client nicht zur Verfügung stellen möchte, kann stattdessen der Statuscode 404 (Not Found) verwendet werden
Mit anderen Worten: Wenn der Client durch Authentifizierung Zugang zur Ressource erhalten KANN, sollte 401 gesendet werden.