Estoy construyendo una API RESTful que usa tokens JWT para la autenticación de usuarios (emitida por un login
punto final y enviada en todos los encabezados después), y los tokens deben actualizarse después de un período de tiempo fijo (invocando un renew
punto final, que devuelve un token renovado )
Es posible que la sesión de API de un usuario se vuelva inválida antes de que caduque el token, por lo tanto, todos mis puntos finales comienzan verificando que: 1) el token sigue siendo válido y 2) la sesión del usuario sigue siendo válida. No hay forma de invalidar directamente el token, porque los clientes lo almacenan localmente.
Por lo tanto, todos mis puntos finales deben indicar a mis clientes dos posibles condiciones: 1) que es hora de renovar el token o 2) que la sesión se ha vuelto inválida y ya no se les permite acceder al sistema. Puedo pensar en dos alternativas para que mis puntos finales indiquen a sus clientes cuando se produce una de las dos condiciones (supongamos que los clientes pueden adaptarse a cualquiera de las opciones):
- Devuelve un código http 401 (no autorizado) si la sesión se ha vuelto inválida o devuelve un código 412 (condición previa fallida) cuando el token ha expirado y es hora de llamar al
renew
punto final, que devolverá un código 200 (ok). - Devuelva 401 para indicar que la sesión no es válida o que el token ha expirado. En este caso, el cliente llamará inmediatamente al
renew
punto final, si devuelve 200, el token se actualiza, pero sirenew
también devuelve 401, significa que el cliente está fuera del sistema.
¿Cuál de las dos alternativas anteriores recomendaría? ¿Cuál sería más estándar, más simple de entender y / o más RESTANTE? ¿O recomendarías un enfoque completamente diferente? ¿Ve algún problema obvio o riesgos de seguridad con cualquiera de las opciones? Puntos adicionales si su respuesta incluye referencias externas que respaldan su opinión.
ACTUALIZAR
Chicos, concéntrense en la pregunta real: ¿ cuál de las dos alternativas de código http para señalar una renovación / invalidación de sesión es la mejor? No importa el hecho de que mi sistema usa JWT y sesiones del lado del servidor, esa es una peculiaridad de mi API para reglas comerciales muy específicas, y no la parte para la que busco ayuda;)