Uso tokens jwt en mi proyecto. Tokens de actualización de larga duración para autenticar y tokens de acceso de corta duración para recursos protegidos. El token de actualización se guarda en una cookie de solo http para reducir el riesgo de ataques xss. Los tokens de acceso solo se almacenarán en mi tienda vuex de mi interfaz. ¿Debo renovar mi token de actualización si el usuario cambia la contraseña? No almaceno tokens de actualización en mi base de datos, porque como entendí, el propósito principal de jwts es que puedo usar criptografía para verificar mi token de actualización entrante y no tengo que buscarlo en mi base de datos (entonces no lo hago tiene que usar jwts en absoluto).
Pero, ¿cómo invalido un token de actualización ya enviado, por ejemplo, en otro dispositivo o navegador? Si no uso una base de datos para almacenar tokens de actualización, el token sería válido siempre que se cumpla el tiempo de vencimiento. Agradezco cualquier consejo.
Dado que no almacena tokens en la base de datos, no puede invalidarlos de forma remota. Pero hay algunas prácticas comunes para superar este problema.
NOTA: Estos no son estándares, solo una práctica utilizada por las principales empresas.
1. Almacenar tokens en la base de datos de caché (no en la base de datos principal)
Almacenar JWT tokens
en la base de datos de caché, como Redis
o Memcached
, le permitirá recuperar y verificar el token mucho más rápido. Para invalidar el token, solo necesita eliminarlo del caché.
2. Use acceso de corta duración y token de actualización
Esto se menciona en muchos envíos de seguridad. El experto dice que establezca una vida muy corta (en minutos) tanto para acceder como para actualizar tokens. Además, intercambie el token de actualización cada vez que obtenga un nuevo token de acceso. Este proceso de renovación puede estar ocurriendo en segundo plano (tal vez usando trabajadores). Por lo tanto, no necesita invalidar los tokens, se invalidarán automáticamente después de unos minutos.
Te recomiendo ver esto: https://www.youtube.com/watch?v=rCkDE2me_qk