web-dev-qa-db-fra.com

Jeton expiré - JSON REST - Code d'erreur

J'ai un JSON REST API. Il y a une poignée de main qui vous donnera un jeton qui est valide pendant 15 minutes. Tous les appels que vous faites dans ces 15 minutes devraient fonctionner correctement. Après le 15 minutes Je renvoie un objet d'erreur (inclut le code, le message, success = false) mais je me demandais également quel code d'erreur HTTP je devrais retourner? Et est-ce que l'utilisation d'un code d'erreur HTTP gâchera certains clients? (HTML5, iPhone, Android). Quelle est la meilleure pratique dans ce scénario?

61
BuddyJoe

Vous devez renvoyer un 401 Unauthorized Code d'état. Vous pouvez également fournir un hypermédia pour rétablir le jeton

Pensez à ce qui se passe dans une application Web. Vous allez dire un site bancaire. Sinon, il vous enverra sur la page de connexion. Ensuite, vous vous connectez et vous êtes prêt à partir un moment. Ensuite, il expire et le cycle se répète.

Juste une pensée.

71
suing

selon la spécification rfc6750 - "The OAuth 2.0 Authorization Framework: Bearer Token Usage", https://tools.ietf.org/html/rfc675 , p. 8, section 3.1, le serveur de ressources doit renvoyer 401:>

invalid_token Le jeton d'accès fourni est expiré, révoqué, mal formé ou invalide pour d'autres raisons. La ressource DEVRAIT répondre avec le code d'état HTTP 401 (non autorisé). Le client PEUT demander un nouveau jeton d'accès et réessayer la demande de ressource protégée.

28
Louis

FWIW Facebook utilise 400 avec une réponse JSON personnalisée. Personnellement, je préférerais 401 avec une réponse JSON personnalisée.

Voici le corps de réponse de 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
  }
}
10
rynop

J'ai recherché la spécification OAuth 2 et tout ce que j'ai pu trouver, c'est qu'ils retournent une "erreur de jeton invalide" à son expiration. Il n'y a aucune mention, que je peux trouver, du code HTTP qu'ils utilisent Cependant, je dirais que votre pari le plus sûr consiste à utiliser un 400.

2
Darrel Miller