2010-08-19 2 views
12

Also senden Sie ein paar verschiedene Status-Header in meiner API einschließlich 404, 409, 201, 302 und dergleichen. Jetzt habe ich Probleme mit 401 Unauthorized. Ich sende es gerade, wenn ein Benutzer nicht angemeldet ist (die gesamte API ist Rechte-verwaltet) oder wenn ein Benutzer die spezifischen Zugriffsanforderungen für die bestimmte Ressource, die abgerufen/modifiziert wird, nicht erfüllt.Ein eindeutiger HTTP-Status für nicht eingeloggte vs. nicht autorisierte in einer RESTful-API

Jetzt kontrolliere ich auch den Frontend-Client (eine jQuery/HTML-Anwendung), und ich möchte zwischen den beiden Fällen für 401 unterscheiden. Gibt es einen eindeutigen Status, den ich für nicht eingeloggte Benutzer verwenden sollte? Ist der beste Weg, um Body-Inhalt neben dem Header zu senden?

+0

Ähnliche Fragen zu https://stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses –

Antwort

20

Sie sollten 403 verwenden, um anzugeben, dass der Benutzer nicht berechtigt ist, auf die Ressource zuzugreifen. Mithilfe von 401 können Sie angeben, dass der Benutzer Anmeldeinformationen genau so eingeben muss, wie Sie ihn gerade verwenden. Siehe die Beschreibungen von 401 und 403here.

3

Wie Sie sagen, sollten Sie 403 verwenden, wenn Sie den Benutzer authentifiziert haben, aber der Benutzer nicht berechtigt ist, zu tun, was sie verlangt. z.B. Sie können GET'ing eine Ressource zulassen, aber nicht DELETE oder PUT.

  • 401 wäre falsch, da es im Grunde sagt, dass „ich nicht erkennen, diese Anmeldeinformationen“
  • 403 korrekt ist, da er sagt, dass

„Sie sind nicht, dies zu tun erlaubt“ In jedem Fall sollte der Antworttext immer mehr Informationen enthalten, even when it's an error response. Dies ermöglicht einem Client einen Weg nach draußen, hoffentlich vorwärts (mit eingebetteten Links) oder mit genügend Informationen zum weiteren Vorgehen (zB "Meine Datensätze zeigen an, dass Sie keine Berechtigung zum Löschen von XXX haben, wenden Sie sich bitte an Ihren Systemadministrator und fragen Sie nach dem FOOBAR Erlaubnis ").

+0

Wäre es nicht "haben Sie keine Erlaubnis zu FOOBAR XXX"? – Hello71

+0

Die "keine Berechtigung zum Löschen von XXX" wurde als Antwort auf eine DELETE-Anfrage gedacht, also ja. Wenn Sie eine 403 für eine PUT-Anfrage bereitstellen, würden Sie dies entsprechend formulieren. Die FOOBAR-Sache sollte "FOOBAR role" gelesen haben. Der Punkt ist, dem Benutzer zu sagen, wie er das Problem lösen kann, aber das (Design der Fehlermeldung) ist ein anderes Thema! – mogsie

Verwandte Themen