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?
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.
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.
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
}
}
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.