Saltar al contenido principal

Configurar ORTs

Los tokens de actualización en línea (ORTs) deben habilitarse a nivel de la API (servidor de recursos) mediante Auth0 Dashboard o la Management API.

Configurar desde el Dashboard

  1. Vaya a Dashboard > Applications > API.
  2. Seleccione la API que desea configurar.
  3. En la pestaña Settings, active el interruptor Allow Online Access.
    Dashboard Applications APIs Settings Allow Online Access
  4. Seleccione Save.
Para revisar y configurar los valores del tiempo de espera por inactividad y la duración absoluta de las sesiones, consulte la configuración de Expiración de la sesión del inquilino. Para obtener más información, consulte Configurar la duración de la sesión.

Configuración mediante la Management API

Para habilitar los ORT, realice una solicitud PATCH al endpoint Update Resource Server:
curl --request PATCH \
  --url 'https://<YOUR_DOMAIN>/api/v2/resource-servers/<YOUR_RESOURCE_SERVER_ID>' \
  --header 'authorization: Bearer <YOUR_MANAGEMENT_API_TOKEN>' \
  --header 'content-type: application/json' \
  --data '{"allow_online_access": true}'
Para verificar la configuración, haga una solicitud GET al servidor de recursos:
curl --request GET \
  --url 'https://<YOUR_DOMAIN>/api/v2/resource-servers/<YOUR_RESOURCE_SERVER_ID>' \
  --header 'authorization: Bearer <YOUR_MANAGEMENT_API_TOKEN>'
La respuesta incluye la propiedad allow_online_access:
{
  "id": "resource-server-id",
  "name": "My API",
  "identifier": "https://my-api.example.com",
  "allow_online_access": true,
  ...
}

Obtén un ORT

Para obtener un ORT, incluye el online_access scope en tu solicitud de autorización usando el Flujo de código de autorización o el Flujo de código de autorización con PKCE.
https://<YOUR_DOMAIN>/authorize \
    audience=<YOUR_API_AUDIENCE> \
    scope=openid profile online_access \
    response_type=code \
    client_id=<YOUR_CLIENT_ID> \
    redirect_uri=<https://YOUR_APP/callback> \
    state=<OPAQUE_VALUE>
Después de que el usuario se autentique, intercambia el authorization code por tokens:
curl --request POST \
  --url 'https://<YOUR_DOMAIN>/oauth/token' \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data grant_type=authorization_code \
  --data 'client_id=<YOUR_CLIENT_ID>' \
  --data 'code=<YOUR_AUTHORIZATION_CODE>' \
  --data 'redirect_uri=<https://YOUR_APP/callback>' \
  --data 'code_verifier=<YOUR_CODE_VERIFIER>'
La respuesta del token incluye el ORT:
{
  "access_token": "eyJ...",
  "id_token": "eyJ...",
  "refresh_token": "ORT...",
  "token_type": "Bearer",
  "expires_in": 86400
}
Los ORT llevan el prefijo ORT para distinguirse de los tokens de actualización. Sin embargo, debe tratar el token como un valor opaco y no basarse en su estructura interna.

Use un ORT

Intercambia el ORT por un nuevo token de acceso cuando el token de acceso actual caduque o esté a punto de hacerlo:
curl --request POST \
  --url 'https://<YOUR_DOMAIN>/oauth/token' \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data grant_type=refresh_token \
  --data 'client_id=<YOUR_CLIENT_ID>' \
  --data 'refresh_token=<YOUR_ONLINE_REFRESH_TOKEN>'
La respuesta contiene un nuevo token de acceso. Si tu solicitud incluye el scope openid, la respuesta incluye un nuevo token de ID:
{
  "access_token": "eyJ...",
  "id_token": "eyJ...",
  "token_type": "Bearer",
  "expires_in": 86400
}
Auth0 no emite un nuevo refresh_token y, como los ORT no rotan, debes seguir usando el mismo ORT en los intercambios posteriores.

Comportamiento de la extensión de la sesión

Cada intercambio de tokens exitoso:
  • Restablece el tiempo de inactividad de la sesión: El tiempo de inactividad se restablece a su duración completa.
  • No extiende la duración absoluta: La expiración absoluta de la sesión no cambia.
  • Mantiene el SSO: Otras aplicaciones pueden obtener tokens mediante SSO siempre que la sesión siga activa.

Revocar un ORT

Cuando revocas un ORT, se cierra toda la sesión de Auth0, no solo el token. Esto invalida todos los ORT asociados a esa sesión y finaliza el SSO del usuario.
curl --request POST \
  --url 'https://<YOUR_DOMAIN>/oauth/revoke' \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data 'client_id=<YOUR_CLIENT_ID>' \
  --data 'token=<YOUR_ONLINE_REFRESH_TOKEN>'

Use ORTs con Actions

Puede usar ORTs con Auth0 Actions y el trigger de post-login. Con Actions, puede:
  • Usar el objeto event.refresh_token para determinar si el token es un ORT.
  • Acceder a datos específicos de la sesión mediante el objeto event.session para tomar decisiones en función del estado actual de la sesión
exports.onExecutePostLogin = async (event, api) => {
  // Verificar si el token es un Token de actualización en línea
  
  if (event.refresh_token?.access == 'online') {
    // El token es un ORT, puedes referenciar event.session y api.session
    console.log('Exchanging Online Refresh Token bound to Session ID: ', event.session?.id);
    // Obtener los metadatos de sesión y agregarlos en los tokens
    // Suponiendo que los metadatos de sesión se almacenaron previamente
    const importantInformation = event.session?.metadata?.importantInformation;
    api.accessToken.setCustomClaim('info', importantInformation);
    api.idToken.setCustomClaim('info', importantInformation);
  }
};
Auth0 revoca toda la sesión del usuario, no solo el token, cuando se usa el método api.refreshToken.revoke() con un ORT.

Más información