Token abgelaufen - JSON REST API - Fehlercode

83

Ich habe eine JSON-REST-API. Es gibt einen Handschlag, mit dem Sie einen Token erhalten, der 15 Minuten gültig ist. Alle Anrufe, die Sie innerhalb dieser 15 Minuten tätigen, sollten in Ordnung sein. Nach den 15 Minuten gebe ich ein Fehlerobjekt zurück (einschließlich Code, Nachricht, Erfolg = falsch), habe mich aber auch gefragt, welchen HTTP-Fehlercode ich zurückgeben soll. Und wird die Verwendung eines HTTP-Fehlercodes bestimmte Clients durcheinander bringen? (HTML5, iPhone, Android). Was wird in diesem Szenario als Best Practice angesehen?

BuddyJoe
quelle
9
+1, gute Frage. Haben Sie jemals eine gute Lösung dafür gefunden? (Übrigens - sowohl Netflix als auch Linkedin geben einen 401 zurück).
Lasse Christiansen
@ MichaelFreidgeim Diese Frage ist bereits älter
FindOutIslamNow
@FindOutIslamNow, "Mögliches Duplikat" ist eine Möglichkeit zur Bereinigung - um ähnliche Fragen zu schließen und eine mit den besten Antworten zu behalten. Das Datum ist nicht wesentlich. Siehe meta.stackexchange.com/questions/147643/… Wenn Sie damit einverstanden sind, dass eine Klärung erforderlich ist, stimmen Sie bitte über meta.stackexchange.com/questions/281980/… ab
Michael Freidgeim

Antworten:

88

Sie sollten einen 401 UnauthorizedStatuscode zurückgeben. Sie können zusätzlich Hypermedia bereitstellen, um das Token erneut einzurichten

Überlegen Sie, was in einer Web-App passiert. Sie gehen, um eine Bankenseite zu sagen. Wenn dies nicht autorisiert ist, werden Sie zur Anmeldeseite weitergeleitet. Dann melden Sie sich an und können eine Zeit lang loslegen. Dann läuft es ab und der Zyklus wiederholt sich.

Nur ein Gedanke.

verklagen
quelle
39

Gemäß der Spezifikation rfc6750 - "Das OAuth 2.0-Autorisierungsframework: Verwendung von Bearer-Token", https://tools.ietf.org/html/rfc6750 , S. 8, Abschnitt 3.1, sollte der Ressourcenserver 401:> zurückgeben

invalid_token Das bereitgestellte Zugriffstoken ist abgelaufen, widerrufen, fehlerhaft oder aus anderen Gründen ungültig. Die Ressource sollte mit dem Statuscode HTTP 401 (Unauthorized) antworten. Der Client kann ein neues Zugriffstoken anfordern und die geschützte Ressourcenanforderung erneut versuchen.

Louis
quelle
2
Hinweis SOLLTE vs. MUSS . Als Anrufer wäre es schön, sich auf 401 verlassen zu können. Na ja.
dbreaux
12

FWIW Facebook verwendet 400 mit einer benutzerdefinierten JSON-Antwort. Ich persönlich würde 401 mit benutzerdefinierter JSON-Antwort bevorzugen.

Hier ist der Antworttext von FB:

{
  "error": {
    "message": "Error validating access token: Session has expired on Jul 17, 2014 9:00am. The current time is Jul 17, 2014 9:07am.",
    "type": "OAuthException",
    "code": 190,
    "error_subcode": 463
  }
}
rynop
quelle
28
Etwas sagt mir, dass Facebook als Ausnahme behandelt werden sollte, nicht als Richtlinie für die Entwicklung. Nur sagen.
Victor Ivens
6
Handelt es sich um einen Anruf bei Facebook bezüglich eines Autorisierungsservers oder eines Ressourcenanbieters? Der Autorisierungsserver sollte 400 zurückgeben: tools.ietf.org/html/rfc6749#section-5.2 , aber der Ressourcenanbieter sollte 401
Michael Freidgeim