node example node.js jwt hapijs json-web-token

node.js - example - ¿Cómo destruir tokens JWT al cerrar sesión?



json web token node js example (2)

El JWT se almacena en el navegador, así que elimine el token eliminando la cookie en el lado del cliente

Si también necesita invalidar el token del lado del servidor antes de su fecha de caducidad, por ejemplo, cuenta eliminada / bloqueada / suspendida, cambio de contraseña, cambio de permisos, usuario desconectado por el administrador, consulte Invalidación de tokens web de JSON para algunas técnicas comunes como creando una lista negra o rotando tokens

Estoy usando jwt plugin y estrategia en hapijs. Puedo crear el token jwt al iniciar sesión como usuario y autenticar otras API utilizando el mismo token a través de la estrategia ''jwt''. Estoy configurando el token en ''request.state.USER_SESSION'' como una cookie donde USER_SESSION es el nombre del token. Tampoco estoy guardando estos token en la base de datos. Pero, ¿cómo puedo destruir el token jwt en el momento del cierre de sesión? Por favor, sugiera una manera.


No puede caducar manualmente un token después de que se haya creado. Por lo tanto, no puede cerrar la sesión con JWT en el lado del servidor como lo hace con las sesiones.

JWT no tiene estado, lo que significa que debe almacenar todo lo que necesita en la carga útil y omitir la realización de una consulta de base de datos en cada solicitud. Pero si planea tener una funcionalidad de cierre de sesión estricta, que no puede esperar la caducidad automática del token, aunque haya limpiado el token desde el lado del cliente, es posible que deba ignorar la lógica sin estado y hacer algunas consultas. Entonces, ¿qué es una solución?

  • Establecer un tiempo razonable de caducidad en fichas

  • Eliminar el token almacenado del lado del cliente al cerrar sesión

  • Consulta de token contra The Blacklist en cada solicitud autorizada

La lista negra

"Lista negra" de todos los tokens que ya no son válidos y aún no han caducado. Puede usar una base de datos que tenga la opción TTL en los documentos que se establecerán en la cantidad de tiempo restante hasta que caduque el token.

Redis

Redis es una buena opción para Blackblist , que permitirá un acceso rápido en memoria a la lista. Luego, en un middleware de algún tipo que se ejecute en cada solicitud autorizada, debe verificar si el token proporcionado está en la Lista negra . Si es así deberías lanzar un error no autorizado. Y si no lo está, déjelo y la verificación JWT lo manejará e identificará si está vencido o si aún está activo.