El token de actualización tiene al menos dos propósitos. Primero, el token de actualización es una especie de 'prueba' de que un cliente OAuth2 ya ha recibido permiso del usuario para acceder a sus datos y, por lo tanto, puede solicitar un nuevo token de acceso nuevamente sin que el usuario tenga que pasar por todo el flujo de OAuth2. Y en segundo lugar, ayuda a aumentar todo el flujo de seguridad en comparación con un token de acceso de larga duración. Tocaré estos dos puntos con un poco más de detalle.
Actualizar tokens como medio para no molestar al usuario
Hablemos del primer propósito con un ejemplo. Suponga que usted, un usuario, está utilizando una aplicación web de cliente de terceros que desea interactuar con los datos de su cuenta de YouTube. Una vez que otorgue permiso a la aplicación Cliente para usar sus datos de YouTube, ¿le gustaría que la aplicación Cliente le solicite su permiso nuevamente?¿Cuándo expiró su token de YouTube? ¿Qué sucede si el tiempo de vencimiento del token de YouTube es muy bajo, como 5 minutos? ¡Sería un poco molesto que la aplicación Cliente le pidiera su permiso al menos cada 5 minutos! La solución que propone OAuth2 a este 'problema' son los tokens de actualización. Al usar tokens de actualización, el token de acceso puede permanecer de corta duración (lo cual es deseable en caso de que el token de acceso se filtre o sea robado de alguna manera), y el token de actualización puede permanecer más tiempo (más) de vida, lo que permite al Cliente obtener un nuevo acceso token cuando uno expira sin requerir el permiso del usuario (nuevamente).
Pero, ¿por qué una ficha de actualización? Si el objetivo es no molestar al usuario con solicitudes de permiso, ¿por qué el cliente no puede simplemente decir "Hola, servidor de autorización, quiero otro token de acceso. ¡Ahora!" O, "Hola, servidor de autorización, aquí está mi token caducado, ¡dame uno nuevo!". Bueno, el token de actualización sirve como una especie de "prueba" de que un Usuario concedió acceso al Cliente en algún momento original. Esta "prueba" tiene la forma del token de actualización firmado digitalmente por el servidor de autorización. Si el cliente presenta un token de actualización, el servidor de autorización puede verificar que el cliente recibió, en algún momento del pasado, el permiso del usuario, y el cliente no tiene que volver a preguntarle al usuario.
Actualizar el token como medio para aumentar la seguridad
Sin embargo, esto plantea la pregunta: "Bueno, ¿qué sucede si el token de actualización se filtra o se lo roban, o simplemente lo mantiene una aplicación Cliente maliciosa que no se deshace de él a petición del usuario? ¿No puede el atacante simplemente continuar ¿Usar el token de actualización para obtener un token de acceso válido indefinidamente (o hasta que expire)? Esta pregunta lleva a discutir el segundo propósito que mencioné, de los tokens de actualización que contribuyen a un flujo más seguro.
El problema que surge con los tokens de acceso es que, una vez adquiridos, solo se presentan al servidor de recursos (YouTube, por ejemplo). Entonces, si un token de acceso es robado o comprometido, ¿cómo le dice al servidor de recursos que no confíe en ese token? Bueno, realmente no puedes. La única forma de hacerlo sería cambiar la clave de firma privada en el servidor de autorización (la clave que firmó el token en primer lugar). Me imagino que esto es un inconveniente y, en algunos casos (como Auth0), no es compatible.
Por otro lado, los tokens de actualización deben presentarse al servidor de autorización con frecuencia, por lo que si uno se ve comprometido, es trivial revocar o denegar el token de actualización en su totalidad y no tener que cambiar ninguna clave de firma.