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:
- El usuario abre la aplicación y proporciona sus credenciales de inicio de sesión.
- 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.
- 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.
- 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.
- 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).
- 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.