- Flujo de credenciales de cliente: La aplicación actúa en su propio nombre y se autentica como tal. La solicitud puede haber sido iniciada por un usuario, pero ese contexto se perderá. El servicio posterior solo conoce la identidad de la aplicación que realiza la llamada.
- Intercambio de tokens On-Behalf-Of (OBO): La aplicación recibe un token con alcance de usuario y puede intercambiarlo por un token nuevo para llamar a servicios posteriores. Esto conserva la identidad y el contexto del usuario final original a lo largo de toda la cadena de llamadas.
- Mantiene la identidad y los permisos del usuario original
- Tiene alcances específicos para el Servicio B
- Permite que el Servicio B tome decisiones de autorización basadas en el usuario final
post-login de Actions, donde:
- El
event.transaction.protocolse establece enoauth2-token-exchange. - El
event.transaction.actorregistra la cadena de delegación completa.
Cuando compras el complemento Auth0 for AI Agents, puedes usar el límite máximo de tasa de la Authentication API de tu nivel de suscripción para los intercambios de tokens OBO. Por ejemplo, si usas Private Cloud 100 RPS, puedes superar el límite de 30 RPS para el intercambio de tokens OBO y aprovechar la capacidad completa de 100 RPS para tus solicitudes de intercambio de tokens OBO. El límite de la Authentication API es compartido y actúa como límite global para todas las solicitudes de la Authentication API, incluidos, en conjunto, los inicios de sesión, las renovaciones de tokens y los intercambios de tokens. Ponte en contacto con tu Technical Account Manager para obtener más información.
Casos de uso
- Servidores MCP que necesitan llamar a API de primera parte en nombre del usuario
- Microservicios que necesitan llamar a servicios posteriores en nombre del usuario
Cómo funciona
Ejemplo: un servidor MCP llama a una API de primera parte
Paso 1: Autenticación del usuario
| Claim | Valor | Descripción |
|---|---|---|
sub | auth0|user123 | La identidad del usuario final |
aud | https://mcp-server.example.com | Token con alcance para el servidor MCP |
azp (o client_id según el perfil del token de acceso) | spa_client_id | La aplicación cliente que solicitó el token |
Paso 2: Intercambio OBO
| Claim | Value | Description |
|---|---|---|
sub | auth0|user123 | Se conserva la misma identidad del usuario |
aud | https://first-party-api.example.com | Token con alcance para la API de primera parte |
azp (o client_id según el perfil del token de acceso) | mcp_server_client_id | Cliente que solicitó el token (el servidor MCP que realizó el intercambio) |
act | {"sub": "mcp_server_client_id","act": {"sub": "spa_client_id"}} | Cadena de delegación que muestra todos los actores implicados |
El claim act
act (actor) rastrea toda la cadena de delegación. Cada nivel de act representa un servicio de la cadena de llamadas, y el act.sub del nivel más externo identifica al actor actual que realizó el intercambio de tokens.
En nuestro ejemplo:
act.subdel nivel más externo:mcp_server_client_id(el servidor MCP que acaba de intercambiar el token)act.subanidado:spa_client_id(la aplicación cliente original)
azp debe coincidir con el valor de act.sub del nivel más externo, e identificar el servicio que realizó más recientemente el intercambio de tokens.
Si la API de primera parte llama a otro servicio posterior (https://calendar-api.acme.com), la cadena de delegación se extendería:
act anidados.
Almacene en caché los tokens de acceso durante toda su vida útil, en lugar de solicitar uno nuevo para cada llamada a la API. Los tokens de acceso se pueden reutilizar hasta que expiren; repetir los intercambios de tokens desperdicia recursos, aumenta la latencia y puede activar límites de velocidad.
Usuario > servidor MCP > flujo de la API
- Autenticación del usuario: El usuario se autentica en la aplicación cliente. El Servidor de autorización de Auth0 emite el Token A, con alcance correspondiente al servidor MCP.
- Solicitud inicial: La aplicación cliente llama al servidor MCP y pasa el Token A en el encabezado
Authorization: Bearer. - Validación e intercambio de tokens: El servidor MCP recibe el Token A, lo valida y lo envía al endpoint
/oauth/tokendel Servidor de autorización de Auth0. Mediante el intercambio de tokens OBO, el servidor MCP presenta el Token A comosubject_tokeny solicita un nuevo token para la API de primera parte. - Emisión del token: El Servidor de autorización de Auth0 emite el Token B. El Token B tiene el mismo
sub(id de usuario) que el Token A, pero ahoraaud(audiencia) es la API de primera parte. - Llamada posterior: El servidor MCP llama a la API de primera parte con el Token B. La API valida el Token B y comprueba que la solicitud se está realizando legítimamente “en nombre del” usuario original.
Usuario > API1 > API2 > API3
- Autenticación del usuario: El usuario se autentica correctamente con una aplicación cliente. El Servidor de autorización de Auth0 emite el Token A, con alcance para API1.
- Solicitud inicial: La aplicación cliente llama a API1 y envía el Token A en el encabezado
Authorization: Bearer. - API1 delega en API2: API1 recibe el Token A, lo valida y luego lo envía al endpoint
/oauth/tokendel Servidor de autorización de Auth0. Mediante el intercambio de tokens OBO, API1 presenta el Token A comosubject_tokeny solicita un nuevo token para API2. - Emisión del token: El Servidor de autorización de Auth0 concede un nuevo token de acceso, el Token B, a API1. El Token B tiene el mismo
sub(ID de usuario) que el Token A, pero ahora elaud(audiencia) es API2. - Llamada posterior: API1 realiza una solicitud a API2 con el Token B.
- API2 delega en API3: API2 recibe el Token B, lo valida y luego lo envía al endpoint
/oauth/tokendel Servidor de autorización de Auth0. Mediante el intercambio de tokens OBO, API2 presenta el Token B comosubject_tokeny solicita un nuevo token para API3. - Emisión del token: El Servidor de autorización de Auth0 concede un nuevo token de acceso, el Token C, a API2. El Token C tiene el mismo
sub(ID de usuario) que los Tokens A y B, pero ahora elaud(audiencia) es API3. - Llamada posterior: API2 realiza una solicitud a API3 con el Token C. API3 valida el Token C y comprueba que la solicitud se realiza legítimamente “en nombre del” usuario original.
Requisitos previos
- Establezca
app_typeenresource_server. - Establezca
resource_server_identifieren un servidor de recursos válido; es decir,https://my-api.example.com. Auth0 usa el identificador del servidor de recursos como el parámetroaudienceen las llamadas de autorización.
Crear un cliente de API personalizada
- Auth0 Dashboard
- Management API
Para crear un cliente de API personalizada en Auth0 Dashboard:

- Vaya a Applications > APIs y seleccione su API de backend.

- Seleccione Add Application e introduzca un nombre para la aplicación.
- Seleccione Add.

Crear client grant
- Auth0 Dashboard
- Management API
- Ve a Applications > Applications y selecciona tu cliente de API personalizada.
- En API Access, busca tu servidor de recursos (es decir,
https://my-api.example.com) y selecciona Edit. - En User-Delegated Access, selecciona Grant Access y, a continuación, selecciona los permisos que quieras conceder o Always grant all permissions.
- Selecciona Save.
Configura el intercambio de tokens OBO
- Auth0 Dashboard
- Management API
- Ve a Applications > Applications y selecciona tu cliente de API personalizada.
- En Token Exchange, activa On-Behalf-Of Token Exchange.
- Selecciona Save.

Realizar el intercambio de tokens OBO
auth0-api-js, auth0_api_python o la Authentication API.
Guarde en caché los tokens de acceso durante toda su vigencia, en lugar de solicitar uno nuevo para cada llamada a la API. Los tokens de acceso se pueden reutilizar hasta que expiren; repetir los intercambios de tokens desperdicia recursos, aumenta la latencia y puede desencadenar límites de tasa.
- JavaScript
- Python
- cURL
Antes de empezar, asegúrate de haber instalado la biblioteca A continuación, usa el método
auth0-api-js y sus dependencias.Primero, inicializa ApiClient con las credenciales de tu servidor MCP:getTokenOnBehalfOf() para intercambiar tokens:getTokenOnBehalfOf() devuelve un objeto que contiene:accessToken: El nuevo token para la API de nivel inferiorscope: Los alcances otorgadosexpiresIn: Tiempo de expiración del token en segundos
Compatibilidad con organizaciones
org_id. El intercambio de tokens OBO conserva este contexto de organización a lo largo de toda la cadena de delegación.
Cuando Auth0 recibe una solicitud de intercambio de tokens OBO con un token de acceso asociado a una organización, valida lo siguiente:
- Que
org_idexista en tu inquilino - Que el usuario (identificado por
sub) sea miembro de esa organización
- Contiene el mismo claim
org_idque el token original - Aplica las mismas políticas de RBAC específicas de la organización
- Hace que el contexto de la organización esté disponible en el trigger
post-loginde Actions mediante la propiedadevent.organization