Español
  • token
  • oidc
  • refresh token
  • access token
  • ID token

Comprendiendo los tokens de acceso, tokens de actualización y tokens de identificación en el protocolo OpenID Connect (OIDC)

El protocolo OpenID Connect (OIDC) ha surgido como un estándar ampliamente adoptado para la gestión de identidades. Pero, ¿realmente entiendes los roles y atributos de estos tokens?

Charles
Charles
Developer

OIDC, OAuth 2.0 y tokens

El Protocolo OpenID Connect, también conocido como OIDC, ha surgido como un estándar ampliamente adoptado para proporcionar un marco fundamental para la gestión de identidades. Es una capa de autenticación construida sobre el conocido protocolo OAuth 2.0. Mientras que OAuth 2.0 es simplemente para la autorización de recursos, OIDC es el protocolo que estandariza y fortalece la autenticación del cliente, con la ayuda del nuevo token de identificación introducido.

Espera... ¿Podrías haber oído hablar de los tokens de acceso y los tokens de actualización en la era de OAuth, y ahora aparece un nuevo concepto en OIDC? ¿Realmente entiendes las diferencias entre estos tokens?

¿Qué son los tokens de acceso, tokens de actualización y tokens de identificación en OIDC?

Comencemos con un escenario práctico.

Imagina que estás desarrollando una aplicación cliente-servidor típica, y se comunican entre sí a través de APIs RESTful. Quieres mantener la mayoría de tus APIs privadas, permitiendo solo a clientes autorizados acceder a ellas. Necesitarás un mecanismo para autenticar al cliente y autorizar las solicitudes de API a tu servidor.

Idealmente, tus APIs RESTful deberían ser sin estado, es decir, el servidor no debería almacenar ninguna información de sesión del cliente. Cada vez que llega una solicitud válida, el servidor solo debería responder con los datos solicitados. Aquí es donde los tokens entran en juego. Entonces, ¿qué tipo de token deberías usar en tal caso?

Los tokens de acceso se utilizan para proteger tus APIs

En OAuth 2.0 y OIDC, cada API protegida se trata como un recurso. El token de acceso es el mismo token que el cliente transmite al servidor al solicitar un recurso de API, típicamente a través del encabezado de la solicitud y en formato JWT.

En el lado del servidor, cada vez que llega una solicitud, el servidor solo necesita validar si la solicitud entrante lleva un token de acceso válido. El proceso de validación generalmente incluye la decodificación del token JWT, la verificación de la firma y el tiempo de expiración, así como el alcance de la reclamación para garantizar que el cliente tenga los permisos necesarios.

Sin embargo, podrías preguntarte: Si mi aplicación cliente puede tener un token de acceso válido después de un inicio de sesión exitoso, y usa el token de acceso para solicitar APIs del servidor, ¿no es eso suficiente? ¿Por qué necesito los otros tokens?

De hecho, una pregunta válida, y vamos a explicarlo paso por paso.

¿Por qué necesitamos tokens de actualización?

Aunque técnicamente los tokens de acceso cumplen con los requisitos mínimos para hacer que el sistema funcione, sin embargo, debido a preocupaciones de seguridad, la validez de los tokens de acceso suele ser muy corta (típicamente una hora). Entonces, imagina que si solo tenemos tokens de acceso, los usuarios finales tendrán que autenticarse nuevamente cada vez que el token de acceso expire. Para aplicaciones web de una sola página modernas (SPAs) y especialmente aplicaciones móviles, cerrar sesión frecuentemente es una experiencia de usuario bastante dolorosa, aunque solo estamos tratando de proteger su seguridad.

Por lo tanto, necesitamos un equilibrio entre la seguridad de los tokens y la conveniencia del usuario. Por eso se introducen los tokens de actualización.

¿Por qué los tokens de actualización pueden tener una vida más larga?

Los tokens de acceso se utilizan para acceder a recursos de API, por lo que su naturaleza de corta duración ayuda a mitigar el riesgo de ser filtrados o comprometidos. Por otro lado, dado que los tokens de actualización solo se usan para intercambiar nuevos tokens de acceso, no se usan con tanta frecuencia como los tokens de acceso y, por lo tanto, el riesgo de exposición se reduce. Por lo tanto, tener un período de validez más largo se considera aceptable para los tokens de actualización.

Asegurando la seguridad de los tokens de actualización

Como el token de actualización también se almacena en el lado del cliente, garantizar que no se comprometan es un desafío, especialmente para clientes públicos como aplicaciones web de una sola página (SPA) y aplicaciones móviles.

En Logto, los tokens de actualización tienen un mecanismo de rotación automático habilitado por defecto, lo que significa que el servidor de autorización emitirá un nuevo token de actualización cuando cumpla con los criterios:

  • Aplicaciones de una sola página: Reconocidas como clientes no restringidos por el remitente, estas apps requieren la rotación de tokens de actualización. No se puede especificar el tiempo de vida (TTL) del token de actualización.
  • Aplicaciones nativas y aplicaciones web tradicionales: La rotación de tokens de actualización está habilitada de forma inherente, renovándose automáticamente al alcanzar el 70 % de su TTL. Aprende más sobre rotación de tokens de actualización en Logto

Aunque aún tienes la opción de deshabilitar la rotación de tokens de actualización en la página de detalles de la aplicación en la consola de administración, se recomienda encarecidamente mantener esta medida de protección.

¿Qué es un token de identificación y por qué es importante?

El token de identificación es una característica única de OIDC que proporciona información de identidad sobre el usuario autenticado.

Mientras los tokens de acceso se utilizan para acceder a recursos protegidos y los tokens de actualización se utilizan para obtener nuevos tokens de acceso, los tokens de identificación se utilizan típicamente para almacenar en caché la información del usuario en el lado del cliente, reduciendo la necesidad de realizar solicitudes adicionales al servidor de autorización para obtener datos del usuario. En la mayoría de los casos, incluso es seguro decir que tener el token de identificación es equivalente a que el usuario esté autenticado.

Mejores prácticas para manejar tokens

  • Usa HTTPS: Siempre usa HTTPS para asegurar la comunicación entre el cliente y el servidor de autorización. Esto impide que terceros no autorizados intercepten y roben tokens.
  • Establece un tiempo de expiración adecuado para los tokens: Los tokens de acceso deben tener una duración corta para minimizar el riesgo de exposición. Los tokens de actualización pueden tener un período de validez más largo.
  • Habilita la rotación de tokens de actualización: Implementa la rotación de tokens de actualización para mitigar el riesgo de filtración de tokens de actualización.
  • Utiliza control de acceso de grano fino: Usa alcances de grano fino para limitar los permisos de los tokens de acceso. Solo solicita los permisos necesarios para la aplicación cliente. Evita usar alcances "all" o "admin" para evitar la mayoría de las comprobaciones de permisos a menos que sea absolutamente necesario.

Resumen: Diferencias clave de los tokens de acceso, tokens de actualización y tokens de identificación en OIDC

En el protocolo OIDC, los tokens de actualización, de acceso y de identificación trabajan juntos para proporcionar una autenticación de usuario segura y sin problemas.

  • Los tokens de acceso proporcionan autorización para acceder a recursos protegidos.
  • Los tokens de actualización eliminan la intervención del usuario para nuevos tokens de acceso.
  • Los tokens de identificación proporcionan información de usuario en caché en el cliente, mejorando el rendimiento.

Entender el papel y la importancia de estos tokens es crucial para los desarrolladores que implementan autenticación OIDC en sus aplicaciones.