es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo implementar la rotación del Token de Actualización.

Soy completamente nuevo en este tema de Access Token y Refresh Token, por favor corríjame si me equivoco en algún lugar. Según mi conocimiento, la Rotación de Refresh Token significa que cada vez que un usuario solicita un AT (con un RT válido), se le dará un nuevo par de AT1 y RT1. Por lo tanto, la próxima vez que el usuario solicite renovar el AT, deberá utilizar el nuevo RT1 y se le dará un nuevo par de AT2 y RT2.

Mis preguntas son:

  1. Para implementar la Rotación de RT, necesitamos almacenar el RT en la base de datos. Entonces, ¿qué RT necesitamos almacenar en la base de datos, el antiguo o el recién emitido? Según esto, necesitamos almacenar todos los RT vencidos y verificar la base de datos cada vez que se solicite la renovación de un AT, y si está en la base de datos, debemos invalidar inmediatamente la familia de tokens de actualización. Pero si hacemos esto, es posible que necesitemos almacenar una gran cantidad de RT en la base de datos para un solo usuario, y esto será enorme si consideramos a todos los usuarios del sistema. ¿Es esta la forma correcta de implementar la Rotación de RT? Si no lo es, ¿cuál es la forma correcta de implementarla?

  2. En esta documentación sobre la Rotación de RT (en la detección automática de reutilización, punto 4), mencionan que “invalida inmediatamente la familia de tokens de actualización”. Entonces, ¿esto significa que cada RT emitido desde la autenticación inicial tendrá características similares para identificarlos como una familia de tokens (porque se menciona como familia de Refresh Tokens)?

  3. Cuando un usuario cierra sesión en un sistema, ¿cómo podemos invalidar el RT? No creo que simplemente eliminar el RT de las cookies sea la forma correcta, porque, por ejemplo, si el tiempo de vencimiento del RT es de un día y el usuario cierra sesión antes de que expire, el RT sigue siendo utilizable (a menos que hayamos almacenado el RT anterior en la base de datos y verifiquemos en la siguiente renovación de AT) hasta que llegue su tiempo de vencimiento. Entonces, ¿cómo solucionar esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai
    1. Para implementar la Rotación de Refresh Tokens, necesitamos almacenar el refresh token recién emitido en la base de datos. Esto se debe a que, cuando el usuario solicite un nuevo Access Token (AT), el refresh token antiguo (RT) será invalidado y se emitirá un nuevo par de AT y RT. No es necesario almacenar todos los RT expirados en la base de datos, como se menciona en el artículo vinculado, sino solo el RT válido actual para cada usuario.

    2. Sí, cada RT emitido desde la autenticación inicial tendrá las mismas características para identificarlos como una familia de tokens. Esto se debe a que cuando se emite un nuevo RT para renovar el AT, el RT antiguo se invalida de inmediato y todos los demás RT emitidos anteriormente también se invalidan.

    3. Cuando un usuario cierra sesión en el sistema, podemos invalidar el RT eliminándolo de la base de datos. De esta manera, aunque el RT siga siendo válido hasta su tiempo de expiración, no se puede utilizar para obtener un nuevo AT porque se ha invalidado. Además, se recomienda revocar todos los tokens asociados con la sesión del usuario y actualizar el estado del usuario en su aplicación para evitar cualquier acceso no autorizado.

Comments are closed.