it-swarm.com.de

401 Unauthorized vs 403 Forbidden: Welcher Statuscode ist richtig, wenn sich der Benutzer nicht angemeldet hat?

Nach vielem googeln und stapeln ist es mir immer noch nicht klar, da viele Artikel und Fragen/Antworten zu allgemein waren (einschließlich 403 Verbotene vs 401 Nicht autorisierte HTTP-Antworten was nicht speziell für meinen Anwendungsfall war).

Frage: Wie lautet der richtige HTTP-Statuscode, wenn sich der Benutzer nicht angemeldet hat und einige Seiten anzeigen möchte, die nur angemeldeten Benutzern angezeigt werden sollen?

4
Mohammad Naji

Die genaue befriedigende einmalige Antwort, die ich gefunden habe, lautet:

Kurze Antwort:

401 nicht Autorisiert


Beschreibung:

Während wir zuerst wissen, ist authentication (hat der Benutzereingeloggtoder nicht?) Und dann werden wir in authorisation (tun Er hat das benötigtePrivilegoder nicht?), aber hier ist der Schlüssel, der uns falsch macht:

Aber geht es nicht um Autorisierung, nicht um Authentifizierung?

Damals, als die HTTP-Spezifikation (RFC 2616) geschrieben wurde, sind die beiden Wörter Möglicherweise nicht so unterschiedlich verstanden worden. Aus der Beschreibung Und anderen unterstützenden Texten geht hervor, dass es sich bei 401 um die Authentifizierung Handelt.

Von HTTP-Statuscodes 401 Nicht autorisiert und 403 für Authentifizierung und Autorisierung (und OAuth) verboten .

Also vielleicht, wenn wir die Standards neu schreiben wollen! Wenn wir uns auf jedes Wort konzentrieren, können wir auf die folgende Tabelle verweisen:

Status Code | Old foggy naming | New clear naming | Use case
+++++++++++ | ++++++++++++++++ | ++++++++++++++++ | ++++++++++++++++++++++++++++++++++
401         | Unauthorized     | Unauthenticated  | User has not logged-in
403         | Forbidden        | Unauthorized     | User doesn't have enough privilege
7
Mohammad Naji

Dies hängt von dem Mechanismus ab, den Sie für die Anmeldung verwenden.

Die Spezifikation für 403 Forbidden sagt:

Der Statuscode 403 (Verboten) zeigt an, dass der Server Die Anforderung verstanden hat, sie jedoch nicht autorisiert. Ein Server, der Veröffentlichen möchte, warum die Anforderung verboten wurde, kann Diesen Grund in der Antwort-Nutzlast (falls vorhanden) beschreiben.

Wenn in der Anforderung Authentifizierungsinformationen angegeben wurden, hält der Server sie für nicht ausreichend, um Zugriff zu gewähren. Der Client SOLLTE die Anforderung NICHT automatisch mit den gleichen Anmeldeinformationen wiederholen. Der Client kann die Anforderung mit neuen oder anderen Anmeldeinformationen wiederholen. Eine Anfrage kann jedoch aus Gründen Verboten sein, die nicht mit den Anmeldeinformationen zusammenhängen.

Während 401 Unauthorized ist nicht in der Hauptspezifikation für HTTP-Statuscodes definiert, sondern in der HTTP-Authentifizierungsspezifikation und sagt:

Der Statuscode 401 (Unauthorized) gibt an, dass die Anforderung Nicht angewendet wurde, da keine gültigen Authentifizierungsinformationen für Der Zielressource vorhanden sind. Der Server, der eine 401-Antwort generiert, MUSS Ein WWW-Authenticate-Headerfeld senden (Abschnitt 4.1), das mindestens eine -Aufforderung enthält, die auf die Zielressource anwendbar ist.


Wenn Sie also WWW-Authenticate und Authorization als Authentifizierungsmechanismus verwenden, verwenden Sie 401. Wenn Sie eine andere Methode verwenden, verwenden Sie 403.

2
Quentin

IMO Die Art der Ressource, die Sie abfragen möchten, hängt davon ab. Klingt logischer so. Verboten bezieht sich mehr auf Dateien oder Ordner einer Website oder allgemein auf Ressourcen. Unautorisiert ist logischer zu verwenden, wenn eine Art Ausführung erforderlich ist, Seitenscripts usw.

0
Merak Marey