web-dev-qa-db-de.com

Autorisierung in RESTful HTTP API, 401 WWW-Authenticate

Ich erstelle einen RESTful-Dienst, um Daten für eine Webanwendung bereitzustellen. Ich habe zwei verwandte Fragen dazu.

1. Wie gehe ich mit nicht autorisierten Anfragen um?

Ich habe vor, auf Anfragen mit folgenden Codes zu antworten:

  • Ist die Ressource offen und gefunden? 200 OK
  • Müssen Sie authentifiziert werden, um auf die Ressourcen zugreifen zu können? 401 nicht Autorisiert
  • Haben Sie keinen Zugriff auf eine Ressourcenkategorie? 403 Verboten
  • Haben Sie Zugriff auf eine Ressourcenkategorie, aber nicht auf diese bestimmte Ressource? 404 Not Found, um zu verhindern, dass Personen die Existenz einer Ressource kennen, auf die sie keinen Zugriff haben.
  • Existiert die Ressource nicht? 404 Nicht gefunden

Ist dies eine empfohlene Vorgehensweise für einen RESTful-Service?

2. Welchen WWW-Authenticate-Header sollte 401 liefern?

Ich lese auf Wikipedia (wahrscheinlich nicht die genaueste Ressource, aber es funktioniert für mich), dass eine 401-Antwort muss einen WWW-Authenticate-Header enthält, jedoch konnte ich bei weiterer Suche keine Ressource finden Darin heißt es, was dieser Wert bedeutet und was er sein sollte.

Ich habe mehrere SO - Fragen und Forumsthemen zu diesem Header gefunden, und bei allen scheint es sich um OAuth zu handeln, die Verwendung von 401-Statuscodes zu empfehlen oder Sie sagen, Sie könnten sich nur etwas einfallen lassen.

Was ist der korrekte Wert, den dieser Header enthalten sollte?

34
Aidiakapi

Um Ihre Fragen zu beantworten:

Wie gehe ich mit nicht autorisierten Anfragen um?

Die von Ihnen beschriebene Art und Weise ist so ziemlich der empfohlene Weg für einen RESTful-Service. Soweit ich sehen kann, ist daran absolut nichts auszusetzen.

Welchen WWW-Authenticate-Header sollten 401 Antworten liefern?

Im Allgemeinen teilt der WWW-Authenticate-Header dem Client mit, welche Art von Authentifizierung der Server akzeptiert. Wenn der Client eine nicht autorisierte Anforderung sendet, was bedeutet, dass er eine Anforderung mit einem fehlenden oder ungültigen Authorization-Header sendet, verwendet der Server WWW-Authenticate, um dem Client mitzuteilen, welches Authentifizierungsschema er akzeptiert (dh Basic, Digest oder OAuth) und für welchen Bereich .

Stellen Sie sich das als eine Art Identifikationsfrage oder Herausforderung des Servers vor, d. H. Etwas wie "Wer bist du?" oder "Beweisen Sie, wer Sie sind, indem Sie auf folgende Weise Anmeldeinformationen bereitstellen!".

Zum Beispiel: WWW-Authenticate: Basic realm="My App"

Hier teilt der Server dem Client mit, dass er ein Authentifizierungsschema namens Basic verwendet. Der Bereich ist nichts weiter als eine Zeichenfolge, die einen geschützten Bereich auf dem Server identifiziert.

21
benjiman

Aufgrund meiner Recherche (googeln) entschied ich mich zu senden: Newauth realm = "use login token".

Die Website http://greenbytes.de/tech/tc/httpauth/#unknown hat Testfälle für verschiedene Auth-Methoden, und ich habe nichts gefunden, was "Get Auth Token" beschreibt, und daher denke ich, dass es eine ist 'Newauth'.

Auch wichtig für mich: Dies erstellt keine Anmeldeaufforderung auf der Clientseite.

0
sigi