it-swarm.com.de

Ist der HTTP-Code 401 oder 403 geeignet, wenn ein angemeldeter Benutzer die Daten nicht anzeigen darf?

Ich suche nach einer guten Möglichkeit, einen Fehler zurückzugeben, wenn ein nicht authentifizierter/nicht autorisierter Benutzer versucht, einen Inhalt mit eingeschränktem Zugriff von meiner Website abzurufen. Derzeit fordere ich den Benutzer auf, sich anzumelden, die Anmeldeinformationen zu überprüfen und in der Sitzung PHP die Benutzer-ID und den Ablauf der Sitzung zu speichern. Diese Informationen werden jedes Mal überprüft, wenn ein Benutzer versucht, auf die Site zuzugreifen (alle Daten werden über PHP Skripte abgerufen).

Wenn der Benutzer nicht autorisiert ist, gebe ich derzeit eine Fehlerinformation im JSON-Format zurück. Diese Informationen können dann vom Front-End (HTML/JS) verwendet werden, um "ordnungsgemäß fehlzuschlagen". Aber ich glaube, ein geeigneterer Weg ist es, einfach einen HTTP-Fehlercode zu liefern.

Nachdem ich jedoch die Codes 401 und 403 in Wikipedia und bei W3C gelesen habe, bin ich verwirrt, welchen ich verwenden soll. 401 scheint der richtige zu sein, aber sie sagen ausdrücklich, dass es den HTTP-Authentifizierungsmechanismus annimmt. Soll ich also 403 verwenden? Aber für diese eine sie sagen " Autorisierung wird nicht helfen und die Anfrage sollte nicht wiederholt werden. "

Gibt es auch eine Standardmethode, um Informationen darüber bereitzustellen, warum der Zugriff verweigert wurde (z. B. damit der Benutzeragent zwischen nicht autorisiertem Benutzer und abgelaufener Sitzung unterscheiden kann)?

2
texnic

Perfekt erklärt in dieser URL: https://web.archive.org/web/20131026070133/http://danielirvine.com/blog/2011/07/18/understanding-403-forbidden/

Es gibt ein Problem mit 401 Unauthorized, dem HTTP-Statuscode für Authentifizierungsfehler. Und das ist genau das Richtige: Es dient der Authentifizierung und nicht der Autorisierung. Der Server, der eine 401-Antwort erhält, teilt Ihnen mit: „Sie sind nicht authentifiziert - entweder gar nicht oder falsch authentifiziert -, aber bitte authentifizieren Sie sich erneut und versuchen Sie es erneut.“ Als Hilfestellung wird immer ein WWW-Authenticate-Header mit einer Beschreibung angezeigt wie man sich authentifiziert.

Dies ist eine Antwort, die im Allgemeinen von Ihrem Webserver und nicht von Ihrer Webanwendung zurückgegeben wird.

Es ist auch etwas sehr Vorübergehendes. Der Server fordert Sie auf, es erneut zu versuchen.

Für die Autorisierung verwende ich also die Antwort 403 Verboten. Es ist permanent, es ist an meine Anwendungslogik gebunden und es ist eine konkretere Antwort als ein 401.

Der Server, der eine 403-Antwort erhält, teilt Ihnen mit: "Es tut mir leid. Ich weiß, wer Sie sind - ich glaube, wer Sie sind -, aber Sie haben keine Berechtigung, auf diese Ressource zuzugreifen. Wenn Sie den Systemadministrator freundlich fragen, erhalten Sie möglicherweise eine Erlaubnis. Aber bitte störe mich nicht noch einmal, bis sich deine Lage ändert. "

Zusammenfassend sollte eine nicht autorisierte 401-Antwort für eine fehlende oder fehlerhafte Authentifizierung verwendet werden, und eine verbotene 403-Antwort sollte anschließend verwendet werden, wenn der Benutzer authentifiziert ist, aber nicht berechtigt ist, den angeforderten Vorgang für die angegebene Ressource auszuführen.

5
Mani