¿Cómo implementar la auto-revocación de JWT?

0

Estoy trabajando en una API usando Node y Express, con una base de datos Mongo. Mis usuarios pueden autenticarse utilizando una ruta y obtienen un JWT a cambio.

Quiero implementar un mecanismo de seguridad para proteger dichos tokens. Es decir, quiero que los tokens se revoquen automáticamente cuando un usuario cambie su contraseña y proporcione un botón "Revocar todas las aplicaciones", que anularía el todos tokens creados.

Para hacerlo, agregué un nonce en el cuerpo de JWT, que es un UUID v4 aleatorio. Cuando el usuario cambia su contraseña o hace clic en el botón, se genera un nuevo UUID, lo que provoca una revocación de facto de todos los tokens, ya que el cuerpo del JWT no coincidirá con lo que viene de la base de datos.

¿Es este un buen enfoque? No puedo pensar en una forma en que esto se rompería, ¿hay algo que haya pasado por alto?

    
pregunta Rogue 02.03.2017 - 13:15
fuente

2 respuestas

2

Su enfoque es sólido cuando se trata de seguridad, siempre y cuando (1) utilice un PRNG criptográficamente seguro y (2) no filtre los UUID de alguna manera. Sin embargo, significa que debe ingresar a la base de datos para verificar el UUID en cada solicitud . Eso niega el aumento de rendimiento que se obtiene al usar un JWT en lugar de un ID de sesión tradicional.

Una pequeña mejora en el rendimiento que puedes hacer es agregar tokens revocados a una lista de revocaciones que se elimina automáticamente para eliminar tokens caducados. En cada solicitud, verifica si el token está en esa lista. Como es probable que una lista de todos los tokens revocados sea más corta que una lista de todos sus usuarios, la búsqueda sería algo más rápida.

Y como siempre el diablo está en los detalles. Estoy seguro de que se pueden cometer muchos errores al implementar cualquiera de estos esquemas en el código, pero ese nivel de detalle está fuera del alcance de su pregunta.

    
respondido por el Anders 02.03.2017 - 13:47
fuente
-1

Como dijo Anders, tendrá que ir a la base de datos en cada solicitud. Junto con una optimización que está proponiendo con una lista sin tokens caducados, puede implementar esa lista como un filtro bloom en la memoria. De esa manera, deberá acceder a la base de datos solo en caso de que la respuesta sea "Tal vez" y el rendimiento sea mucho mayor.

    
respondido por el Marko Vodopija 02.03.2017 - 14:48
fuente

Lea otras preguntas en las etiquetas