Token caducado - API REST JSON - Código de error

83

Tengo una API REST JSON. Hay un apretón de manos que le dará una ficha válida por 15 minutos. Todas las llamadas que hagas dentro de esos 15 minutos deberían funcionar correctamente. Después de los 15 minutos, estoy devolviendo un objeto de error (incluye código, mensaje, éxito = falso) pero también me preguntaba qué código de error HTTP debería devolver. ¿Y el uso de un código de error HTTP afectará a ciertos clientes? (HTML5, iPhone, Android). ¿Qué se considera la mejor práctica en este escenario?

BuddyJoe
fuente
9
+1, gran pregunta. ¿Alguna vez encontró una buena solución para esto? (por cierto, tanto netflix como linkedin devuelven un 401).
Lasse Christiansen
@MichaelFreidgeim Esta pregunta ya es más antigua
FindOutIslamNow
@FindOutIslamNow, "Posible duplicado" es una forma de limpiar: cerrar preguntas similares y mantener una con las mejores respuestas. La fecha no es imprescindible. Consulte meta.stackexchange.com/questions/147643/… Si está de acuerdo en que requiere una aclaración, vote en meta.stackexchange.com/questions/281980/…
Michael Freidgeim

Respuestas:

88

Debe devolver un 401 Unauthorizedcódigo de estado. También puede proporcionar hipermedia para establecer el token nuevamente

Piense en lo que sucede en una aplicación web. Vas a decir un sitio bancario. Si no está autorizado, lo enviará a la página de inicio de sesión. Luego inicias sesión y estás listo para ir por un tiempo. Luego expira y el ciclo se repite.

Solo un pensamiento.

demandando
fuente
39

de acuerdo con la especificación rfc6750 - "The OAuth 2.0 Authorization Framework: Bearer Token Usage", https://tools.ietf.org/html/rfc6750 , p.8, sección 3.1, el servidor de recursos debe devolver 401:>

invalid_token El token de acceso proporcionado está caducado, revocado, mal formado o no es válido por otras razones. El recurso DEBE responder con el código de estado HTTP 401 (No autorizado). El cliente PUEDE solicitar un nuevo token de acceso y volver a intentar la solicitud de recurso protegido.

Luis
fuente
2
Nota DEBE vs. DEBE . Como persona que llama, sería bueno poder confiar en 401. Bueno.
dbreaux
13

FWIW Facebook usa 400 con una respuesta JSON personalizada. Personalmente, preferiría 401 con respuesta JSON personalizada.

Aquí está el cuerpo de respuesta 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
  }
}
Rynop
fuente
28
Algo me dice que Facebook debería tratarse como una excepción, no como una guía para el desarrollo. Solo digo.
Victor Ivens
6
¿Es una llamada a Facebook en cuanto a un servidor de autorización o a un proveedor de recursos? El servidor de autorización debería devolver 400: tools.ietf.org/html/rfc6749#section-5.2 , pero el proveedor de recursos debería devolver 401
Michael Freidgeim