Token wygasł - JSON REST API - Kod błędu

84

Mam JSON REST API. Po uścisku dłoni otrzymasz token ważny przez 15 minut. Wszystkie połączenia, które wykonasz w ciągu tych 15 minut, powinny działać poprawnie. Po 15 minutach zwracam obiekt błędu (zawiera kod, wiadomość, sukces = fałsz), ale zastanawiałem się również, jaki kod błędu HTTP powinienem zwrócić? I czy używanie kodu błędu HTTP zepsuje niektórych klientów? (HTML5, iPhone, Android). Co jest uważane za najlepszą praktykę w tym scenariuszu?

BuddyJoe
źródło
9
+1, świetne pytanie. Czy kiedykolwiek znalazłeś dobre rozwiązanie tego problemu? (przy okazji - jak i straty i LinkedIN Zwraca 401).
Lasse Christiansen
@MichaelFreidgeim To pytanie jest już starsze
FindOutIslamNow
@FindOutIslamNow, „Możliwy duplikat” to sposób na uporządkowanie - zamknięcie podobnych pytań i pozostawienie jednego z najlepszymi odpowiedziami. Data nie jest konieczna. Zobacz meta.stackexchange.com/questions/147643/… Jeśli zgadzasz się, że wymaga to wyjaśnienia, zagłosuj na meta.stackexchange.com/questions/281980/ ...
Michael Freidgeim

Odpowiedzi:

89

Powinieneś zwrócić 401 Unauthorized kod stanu. Możesz dodatkowo udostępnić hipermedia, aby ponownie ustanowić token

Pomyśl o tym, co dzieje się w aplikacji internetowej. Idziesz powiedzieć, że witryna bankowa. W przypadku braku autoryzacji przekieruje Cię do strony logowania. Następnie logujesz się i jesteś gotowy na jakiś czas. Następnie wygasa i cykl się powtarza.

Tylko myśl.

pozywanie
źródło
39

zgodnie ze specyfikacją rfc6750 - „The OAuth 2.0 Authorization Framework: Bearer Token Usage”, https://tools.ietf.org/html/rfc6750 , str.8, sekcja 3.1, serwer zasobów powinien zwrócić 401:>

invalid_token Podany token dostępu utracił ważność, został unieważniony, źle sformułowany lub nieprawidłowy z innych powodów. Zasób POWINIEN odpowiedzieć kodem stanu HTTP 401 (nieautoryzowany). Klient MOŻE zażądać nowego tokenu dostępu i ponowić żądanie chronionego zasobu.

Louis
źródło
2
Uwaga POWINIEN a MUSI . Jako osoba dzwoniąca, byłoby miło móc polegać na 401. No cóż.
dbreaux
12

FWIW Facebook używa 400 z niestandardową odpowiedzią JSON. Osobiście wolałbym 401 z niestandardową odpowiedzią JSON.

Oto treść odpowiedzi 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
źródło
29
Coś mi mówi, że Facebook powinien być traktowany jako wyjątek, a nie wytyczna dla rozwoju. Tylko mówię.
Victor Ivens,
6
Czy jest to wezwanie do Facebooka jako serwera autoryzacyjnego, czy do dostawcy zasobów? Serwer autoryzacji powinien zwrócić 400: tools.ietf.org/html/rfc6749#section-5.2 , ale dostawca zasobów powinien zwrócić 401
Michael Freidgeim,