¿Son realmente tan malos los tokens de actualización de JWT en el navegador?

3

Nota: Reconozco que puede faltar algo en la imagen, lo cual es parte de mi razón para publicar. Me gustaría obtener la opinión de las personas con más experiencia que yo en las implementaciones relacionadas con autenticación / autorización.

Aquí es donde estoy atascado en este "no tokens de actualización en aplicaciones cliente":

El supuesto que hago es que sin un token de actualización, tampoco podemos, por motivos de experiencia de usuario, tener un token de acceso de muy corta duración, es decir, si tenemos un token de acceso que caduca cada 15 minutos sin posibilidad de refrescando tendríamos que volver a iniciar sesión cada 15 minutos.

Mi problema: al extender la vida útil del token de acceso, le estamos dando a un potencial atacante MIDM un arma mucho más peligrosa, es decir, un token que da acceso a los recursos que podrían durar días, o incluso para siempre (como he visto en demasiados proyectos).

Para mí, la forma más sencilla de resolver una situación de este tipo es un token de actualización, incluso uno que se encuentra en la parte delantera, porque en mi opinión eso aún es mejor que un token ACCESS de larga duración.

Este token de actualización podría ser:

  • También un JWT que caduca, pero tal vez caduca en una semana más o menos
  • Un token de "uso solo una vez" que se usa para actualizar el token de acceso y luego se reemplaza por un nuevo token de actualización

En mi opinión, este enfoque frente al token de acceso de larga duración resuelve algunos problemas:

  • con este enfoque, puedo mantener un token de acceso de corta duración, por lo que si cae en malas manos, no se puede usar por mucho tiempo
  • Si crees que el token de actualización es aún peor, no estoy de acuerdo, porque hay dos cosas que lo mejoran:

    1. una vez que el usuario principal actualice su token nuevamente, el token de actualización anterior ya no podrá utilizarse
    2. si asumimos que alguien roba nuestro token de actualización MIENTRAS estamos navegando, en cuestión de minutos nuestro navegador intentará usar ese token de actualización, fallará (porque alguien más lo usó y por lo tanto ya no es utilizable) y nos pedirá que iniciar sesión, lo que volverá a invalidar por completo la otra serie de token de actualización obtenida por la entidad maliciosa
    3. incluso si 1 y 2 no fueran verdaderos en todos los escenarios (estoy pensando que varias sesiones / tokens de actualización están permitidos, por lo que no es una sola pila o tokens de actualización sino múltiples) todavía apostaría a que es mejor que invalide la validación de tokens de actualización a través del procedimiento que desee, está invalidando tokens de acceso. un token de acceso JWT es válido en sí mismo y el propósito principal de usar uno es que puede confiar en él simplemente verificándolo, sin tener que hacer otras operaciones costosas como verificar con el servidor de autenticación si está en la lista negra o no. Eso significaría esencialmente tener que verificar este tipo de cosas para CADA solicitud CADA vez hecho con TODO acceso token = no muy escalable, especialmente si lo compara con solo tener que hacer este tipo de cosas UNA VEZ cada 15 minutos para el token de actualización (podría mantener una lista negra de tokens de actualización).

Entonces, con todo esto dicho, ¿está teniendo un token de actualización del "uso una vez" del lado del cliente que también es un JWT y caduca de forma irrazonable? Estamos evitando tener el token de acceso las últimas semanas, ¿cómo puede ser malo?

    
pregunta Salvatore 19.05.2018 - 18:09
fuente

0 respuestas

Lea otras preguntas en las etiquetas