...
Por tanto, el flujo de los JWTs podría ilustrarse cómo:
...
Ejemplo de implementación del proceso de autenticación
...
Por lo tanto, el nuevo flujo del proceso de inicio de sesión quedaría de la siguiente manera:
...
El usuario inicia sesión mediante una llamada a la API.
El servidor genera un JWT y un token de actualización.
El servidor genera una cookie, con una cabecera HttpOnly, con el token de actualización. El JWT y el tiempo de caducidad del token son devueltos al cliente como datos del JSON.
El JWT se almacena en memoria.
Se inicia la cuenta atrás para realizar la actualización silenciosa basándose en el tiempo de caducidad.
En cuanto al proceso de actualización silenciosa, el flujo queda de la siguiente forma:
...
Se realiza una llamada a la API (por ejemplo, refresh_token).
El servidor consulta la cookie con la cabecera HttpOnly en busca de un token de actualización válido.
Si el servidor encuentra un token de actualización válido, envía un nuevo JWT junto con su tiempo de caducidad al mismo tiempo que establece un nuevo token de actualización en la cabecera Set-Cookie.
...
Para persistir las sesiones de forma segura utilizaremos la actualización de tokens. De la misma forma que se utiliza la actualización silenciosa de token para renovar la sesión actual y que el usuario no sea desconectado, se puede usar para obtener un nuevo JWT para la nueva sesión. Cuando el usuario cierra la sesión actual cerrando la pestaña del navegador y vuelve a visitar la aplicación el flujo quedaría de la siguiente manera:
...
Si se detecta que no hay un JWT en memoria entonces se realiza el flujo de actualización silenciosa.
Si se detecta un JWT válido (o no ha sido invalidado) se obtiene un nuevo JWT.
En caso de que el token de actualización haya caducado (si el usuario vuelve a abrir la aplicación tras un largo periodo de tiempo) o haya sido invalidado (si se ha hecho un cierre de sesión forzoso) el usuario obtendrá un error 401. Esto también ocurriría si no hay ningún token de actualización en el momento de recuperar la sesión por lo que se obtendrá un error al llamar a la API (por ejemplo, refresh_token) y se redirigirá al usuario a la pantalla de inicio de sesión.
...