¿Cómo ayuda un token de actualización? [duplicar]

20

Tengo una duda básica o aparentemente me estoy perdiendo algo fundamental. Cuando se habla de una aplicación de Android que habla con el backend utilizando API, el acceso a los recursos / API está protegido mediante tokens de acceso y tokens de actualización (como OAuth 2.0).

Por lo que entiendo, así es como funciona:

  1. El usuario abre la aplicación y proporciona sus credenciales de inicio de sesión.
  2. La aplicación realiza una solicitud POST al servidor y el servidor emite un token de acceso (token aleatorio e indiscutible) a la aplicación.
  3. La aplicación almacena este token de acceso de manera segura en el almacenamiento local (db sqlite / preferencias compartidas, etc.) y usa este token con todas las demás llamadas a la API para que el servidor sepa que está autorizado para acceder al recurso.
  4. Ahora, este token de acceso también tiene un tiempo de caducidad. De modo que incluso si el token de acceso se ve comprometido, de alguna manera, la ventana de ataque sería pequeña.
  5. Ahora, cuando esto suceda, se requerirá que el usuario alquile sus credenciales de inicio de sesión y obtenga un token de acceso autorizado nuevamente, lo cual, al menos en el caso de las aplicaciones móviles, es una mala experiencia de usuario (no aceptable).
  6. Por lo tanto, para resolver este problema, hay un token de actualización que también se emite a la aplicación junto con el token de acceso en primer lugar. Este token de actualización es un token especial de larga duración, que garantiza que tan pronto como caduque el token de acceso, solicite al servidor un nuevo token de acceso, lo que elimina la necesidad de que el usuario vuelva a ingresar sus credenciales de inicio de sesión para recuperar un Nuevo token de acceso autorizado.

Ahora mi pregunta es:

¿Cómo soluciona esto nuestro problema original de evitar el acceso no autorizado a las API? En mi opinión, en realidad lo facilita aún más.

Si el token de acceso se ve comprometido, es muy probable que el token de actualización también se comprometa de la misma manera, ¿no es así? Y como el token de actualización es un token de vida muy larga, el atacante podría usarlo (hasta que el token de actualización no caduque) para seguir generando nuevos tokens de acceso autorizados. ¿Es eso correcto?

Por favor, ayúdame a entender esto.

    
pregunta qre0ct 10.02.2016 - 07:39
fuente

1 respuesta

16

La principal ventaja de un token de actualización es que es más fácil de detectar si está comprometido.

Considere estos dos escenarios:

  1. Se utiliza un único token de autenticación de larga duración.
  2. Se utiliza un token de autenticación de corta duración, y un token de actualización de larga duración solicita periódicamente un nuevo token de autenticación una vez que haya caducado el anterior.

En el escenario 1, si el token de autenticación se ve comprometido, sería difícil para cualquiera detectar esto y el acceso no autorizado podría continuar indefinidamente.

En el escenario 2, si solo el token de autenticación está comprometido (el token de actualización no está comprometido también), solo podría continuar hasta que el token caduque.

En el escenario 2, si el token de actualización está comprometido, una vez que se invoca el token de actualización, todos los demás tokens de autenticación que se generaron usando ese token de actualización se invalidan, por lo que solo 1 parte puede usar el api (por token de actualización) a una hora. Esto hace que varios usuarios invaliden repetidamente los tokens de autenticación de otros generando otros nuevos. La API podría detectar la violación porque las actualizaciones se están realizando antes de la caducidad del token de autenticación, y sabría que revocar inmediatamente el token de actualización.

    
respondido por el TTT 10.02.2016 - 18:36
fuente

Lea otras preguntas en las etiquetas