> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Obtener token

> El intercambio de tokens On-Behalf-Of (OBO) permite que un servicio de nivel intermedio intercambie un token de usuario entrante por un nuevo token con alcance para el servicio posterior.

`POST /oauth/token`

El intercambio de tokens On-Behalf-Of (OBO) ([RFC 8693](https://datatracker.ietf.org/doc/html/rfc8693)) permite que los servicios de nivel intermedio intercambien un token con alcance de usuario por un nuevo token para llamar a servicios posteriores.

El nuevo token conserva la identidad y los permisos del usuario original, a la vez que tiene alcance específico para el servicio posterior, lo que permite que ese servicio tome decisiones de autorización en función del usuario final. La cadena de delegación se rastrea en la claim `act` (actor), y cada nivel representa un servicio en la cadena de llamadas. Para obtener más información, consulta la [documentación del intercambio de tokens On-Behalf-Of](https://auth0.com/docs/secure/call-apis-on-users-behalf/on-behalf-of-token-exchange).

<div id="remarks">
  ## Observaciones
</div>

* Solo los clientes de API personalizados asociados a un servidor de recursos pueden usar el intercambio de tokens OBO. Un cliente de API personalizado debe cumplir los siguientes requisitos:
  * Establezca `app_type` en `resource_server`.
  * Establezca `resource_server_identifier` en un servidor de recursos válido; por ejemplo, `https://my-api.example.com`. Auth0 usa el identificador del servidor de recursos como parámetro de audiencia en las llamadas de autorización.

* Los alcances emitidos para la aplicación pueden diferir de los alcances solicitados. En este caso, se incluirá un parámetro `scope` en el JSON de respuesta. Los alcances se basan en las políticas de [Role-Based Access Control (RBAC)](/es/docs/manage-users/access-control/rbac) del usuario.

* Los intercambios de tokens OBO activan el [desencadenador de Action `post-login`](/es/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger), donde `event.transaction.protocol` se establece en `oauth2-token-exchange` y `event.transaction.actor` registra toda la cadena de delegación.

* La cadena de delegación está limitada a cinco niveles anidados. El intercambio de tokens OBO falla si el token de sujeto ya tiene cinco niveles `act` anidados.

* Almacene en caché los tokens de acceso durante la duración del token, en lugar de solicitar uno nuevo para cada llamada a la API. Los tokens de acceso se pueden reutilizar hasta que expiren; los intercambios de tokens repetidos desperdician recursos, aumentan la latencia y pueden activar límites de frecuencia.

<div id="parameters">
  ## Parámetros
</div>

<ParamField header="DPoP" type="string">
  Una prueba DPoP para la solicitud. Es opcional y solo se requiere si su aplicación usa [Demonstrating Proof-of-Possession](/es/docs/secure/sender-constraining/demonstrating-proof-of-possession-dpop).
</ParamField>

<ParamField header="auth0-forwarded-for" type="string">
  La IP del usuario final como cadena de texto. Defínalo si desea que la protección [Suspicious IP Throttling](/es/docs/secure/attack-protection/suspicious-ip-throttling) funcione en escenarios del lado del servidor.
</ParamField>

<div id="request-body">
  ## Cuerpo de la solicitud
</div>

<ParamField body="grant_type" type="string" required>
  Indica el flujo que está utilizando. Para el intercambio de tokens On-Behalf-Of, use `urn:ietf:params:oauth:grant-type:token-exchange`.
</ParamField>

<ParamField body="subject_token_type" type="string" required>
  El tipo del token de sujeto. Para el intercambio de tokens On-Behalf-Of, use `urn:ietf:params:oauth:token-type:access_token`.
</ParamField>

<ParamField body="subject_token" type="string" required>
  El token de acceso de Auth0 entrante del usuario o del servicio de origen que el servicio de nivel intermedio tiene actualmente.
</ParamField>

<ParamField body="requested_token_type" type="string" required>
  Indica qué tipo de token quiere recibir. Para el intercambio de tokens On-Behalf-Of, use `urn:ietf:params:oauth:token-type:access_token`.
</ParamField>

<ParamField body="client_id" type="string" required>
  El ID de cliente de su cliente de API personalizado. El cliente de API personalizado debe estar asociado a un servidor de recursos (con el mismo identificador). Al igual que con otros tipos de concesión, también puede pasar el ID de cliente en el encabezado Authorization mediante autenticación básica HTTP.
</ParamField>

<ParamField body="client_secret" type="string" required>
  El secreto del cliente de su cliente de API personalizado. Al igual que con otros tipos de concesión, también puede pasar el secreto del cliente en el encabezado Authorization mediante autenticación básica HTTP. Revise las alternativas en la [documentación de referencia de la API de autenticación de Auth0](https://auth0.com/docs/api/authentication#authentication-methods). Tenga en cuenta que no puede establecer `token_endpoint_auth_method` en `none` para el intercambio de tokens OBO.
</ParamField>

<ParamField body="audience" type="string" required>
  El identificador único de la API posterior a la que quiere acceder. Este es el identificador del servicio posterior que recibe y valida el nuevo token.
</ParamField>

<ParamField body="scope" type="string">
  (Opcional) Una lista, delimitada por espacios, de permisos específicos solicitados para la llamada a la API posterior. Si no se especifica, se incluirán todos los alcances concedidos al usuario para la audiencia de destino según las políticas de RBAC.
</ParamField>

<div id="response">
  ## Respuesta
</div>

| Estado | Descripción                                                                                                                                                                   |
| ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 200    | Respuesta correcta. Devuelve un token de acceso para la API posterior, manteniendo la misma identidad del usuario.                                                            |
| 400    | Solicitud incorrecta. Puede ocurrir si la profundidad de la cadena de delegación supera el límite máximo permitido de 4 niveles anidados o si faltan parámetros obligatorios. |
| 401    | No autorizado. El token de sujeto no es válido, ha expirado o las credenciales de cliente son incorrectas.                                                                    |
| 403    | Prohibido. El cliente no tiene permiso para realizar el intercambio de tokens, o el usuario no tiene los alcances solicitados para la audiencia de destino.                   |

<ResponseExample>
  ```json 200 Respuesta theme={null}
  {
    "access_token": "eyJ...",
    "expires_in": 86400,
    "token_type": "Bearer",
    "issued_token_type": "urn:ietf:params:oauth:token-type:access_token"
  }
  ```

  ```json 400 Respuesta (Se superó el límite de la cadena de delegación) theme={null}
  {
    "error": "invalid_request",
    "error_description": "Delegation chain (`act` claim) depth exceeds the maximum allowed limit of 5"
  }
  ```
</ResponseExample>

<div id="response-fields">
  ## Campos de respuesta
</div>

<ResponseField name="access_token" type="string">
  El nuevo token de acceso de Auth0 con alcance para la API posterior. Este [JSON Web Token (JWT)](/es/docs/secure/tokens/json-web-tokens#json-web-tokens) contiene el mismo `sub` (identidad del usuario) que el token de sujeto, con `aud` establecido en la audiencia solicitada de la API posterior. El claim `act` rastrea la cadena de delegación.
</ResponseField>

<ResponseField name="issued_token_type" type="string">
  Confirma el formato del token devuelto. Coincide con `requested_token_type` de la solicitud.

  Valor: `urn:ietf:params:oauth:token-type:access_token`
</ResponseField>

<ResponseField name="token_type" type="string">
  Especifica el esquema de autenticación que se usará en el encabezado Authorization. Para OBO, es `Bearer`, a menos que se use DPoP, en cuyo caso se usará `DPoP`.
</ResponseField>

<ResponseField name="expires_in" type="number">
  La duración del token en segundos.
</ResponseField>

<ResponseField name="scope" type="string">
  (Opcional) Solo se incluye si los alcances concedidos difieren de los alcances solicitados. Lista de alcances delimitada por espacios que se concedieron realmente.
</ResponseField>
