> ## 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 un token

> Intercambie un token de identidad ya existente por un token de Auth0 mediante la concesión de Custom Token Exchange.

export const ResponseSchema = ({statusCode, type = "{}", children}) => {
  const [open, setOpen] = useState(false);
  return <div className="border border-gray-100 dark:border-gray-800 rounded-lg mb-3 overflow-hidden">
      <div className={`flex items-center gap-2.5 px-4 py-2.5 cursor-pointer select-none ${open ? "bg-gray-50 dark:bg-gray-800" : ""}`} onClick={() => setOpen(!open)}>
        {statusCode && <span className="border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 font-mono text-xs px-1.5 py-0.5 rounded">
            {statusCode.startsWith("default") ? "default" : statusCode}
          </span>}
        <span className="text-gray-500 dark:text-gray-400 text-sm font-mono">
          {type}
        </span>
        <span className="text-gray-400 dark:text-gray-500 text-sm italic">
          application/json
        </span>
        <svg className={`ml-auto opacity-50 transition-transform duration-200 ${open ? "rotate-180" : ""}`} width="16" height="16" viewBox="0 0 16 16" fill="none">
          <path d="M4 6l4 4 4-4" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
        </svg>
      </div>
      {open && <div className="px-4 pt-1 pb-3 border-t border-gray-100 dark:border-gray-800">
          {children}
        </div>}
    </div>;
};

<div id="endpoint">
  ## Endpoint
</div>

`POST /oauth/token`

Custom Token Exchange (CTE) proporciona un mecanismo para que las aplicaciones intercambien tokens de identidad existentes por tokens de Auth0 mediante la invocación del endpoint `/oauth/token`, de conformidad con las especificaciones de [RFC 8693](https://datatracker.ietf.org/doc/html/rfc8693). Esta funcionalidad es clave para abordar requisitos avanzados de integración, como intercambiar tokens de Auth0 existentes para acceder a otra audiencia en nombre del mismo usuario, facilitar la integración de proveedores de identidad externos o permitir una migración fluida de usuarios a la plataforma Auth0. El proceso de intercambio es totalmente configurable, ya que los desarrolladores pueden controlar sus detalles mediante lógica personalizada que se ejecuta en una Action de Auth0 dedicada al caso de uso correspondiente.

<Note>
  Custom Token Exchange está disponible actualmente en acceso anticipado. Al usar esta funcionalidad, aceptas los términos aplicables de la prueba gratuita del [Master Subscription Agreement de Okta](https://www.okta.com/legal/). Es tu responsabilidad validar de forma segura el `subject_token` del usuario. Consulta la [Guía del usuario](https://auth0.com/docs/authenticate/custom-token-exchange) para obtener más detalles.
</Note>

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

* Los alcances otorgados a la aplicación pueden diferir de los alcances solicitados. En este caso, se incluirá un parámetro `scope` en la respuesta JSON. Los alcances se filtran como se explica en [Políticas de acceso a la API para aplicaciones](https://auth0.com/docs/get-started/apis/api-access-policies-for-applications)

* `subject_token_type` debe corresponder a un perfil existente de Custom Token Exchange y a una [Action](https://auth0.com/docs/customize/actions) asociada.

* En el caso de las aplicaciones no confidenciales que no pueden mantener protegido el Secreto del cliente (por ejemplo, las aplicaciones nativas), el endpoint permite no enviar ningún Secreto del cliente, pero la propia aplicación debe tener la propiedad `tokenEndpointAuthMethod` establecida en `none`. Puede hacerlo desde la interfaz de usuario (**Dashboard > Applications > configuración de la aplicación**) o mediante la Management API.

* Debe [habilitar Custom Token Exchange para su aplicación](https://auth0.com//docs/authenticate/custom-token-exchange/configure-custom-token-exchange#enable-custom-token-exchange-for-your-application). Para obtener más información, consulte la [documentación de Custom Token Exchange](https://auth0.com/docs/authenticate/custom-token-exchange).

* `actor_token` y `actor_token_type` deben estar ambos presentes o ambos ausentes. Si se proporciona solo uno, se devuelve un error `400` con el código `invalid_request`.

* Cuando `actor_token` está presente, no se emiten tokens de actualización. El scope `offline_access` se excluye de la respuesta.

* MFA no es compatible con las transacciones en las que se establece un actor mediante `setActor()`. Si se requiere MFA y la Action de Custom Token Exchange establece un actor, la solicitud devuelve un error `400`: `MFA is not supported using actor_token with the requested token exchange profile.`

* Cuando la Action llama a `setActor()`, los tokens de acceso y los ID Token emitidos incluyen un claim `act` que representa la [cadena de delegación](/es/docs/secure/call-apis-on-users-behalf/on-behalf-of-token-exchange#the-act-claim). El claim `act` también se incluye en la respuesta de userinfo.

<div id="headers">
  ## Encabezados
</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.
</ParamField>

<ParamField header="auth0-forwarded-for" type="string">
  La dirección IP del usuario final como cadena. Defina este valor si quiere que la protección de Suspicious IP Throttling funcione en escenarios del lado del servidor.
</ParamField>

<div id="body-parameters">
  ## Parámetros del cuerpo
</div>

<ParamField body="grant_type" type="string" required>
  Indica el flujo que usa. Para Custom Token Exchange, use `urn:ietf:params:oauth:grant-type:token-exchange`.

  Valores permitidos: `urn:ietf:params:oauth:grant-type:token-exchange`
</ParamField>

<ParamField body="subject_token_type" type="string" required>
  El tipo del token de sujeto. Para Custom Token Exchange, puede ser cualquier URI dentro de un espacio de nombres de su propiedad, como `http://acme.com/legacy-token` o `urn:acme:legacy-token`. Los siguientes espacios de nombres están reservados y no se pueden usar: `http://auth0.com`, `https://auth0.com`, `http://okta.com`, `https://okta.com`, `urn:ietf`, `urn:auth0`, `urn:okta`.
</ParamField>

<ParamField body="subject_token" type="string" required>
  El token de sujeto, que su Action debe validar y usar para identificar al usuario.
</ParamField>

<ParamField body="client_id" type="string" required>
  El ID de cliente de su aplicación. Al igual que con otros tipos de grant, también puede enviar el ID de cliente en el encabezado Authorization mediante HTTP Basic Auth.
</ParamField>

<ParamField body="client_secret" type="string">
  (Opcional) El secreto del cliente de su aplicación. Al igual que con otros tipos de grant, también puede enviar el secreto del cliente en el encabezado Authorization mediante HTTP Basic Auth. También hay otras alternativas, como se explica en la [documentación de referencia de Authentication API de Auth0](https://auth0.com/docs/api/authentication#authentication-methods). Como Custom Token Exchange puede ser utilizado por aplicaciones públicas, lea [Protección contra ataques](https://auth0.com/docs/authenticate/custom-token-exchange/cte-attack-protection) para implementar medidas de seguridad adicionales.
</ParamField>

<ParamField body="audience" type="string">
  (Opcional) El identificador único de la API de destino a la que desea acceder. Si no se especifica, se usará la audiencia predeterminada del inquilino, según la configuración de [Configuración del inquilino](https://auth0.com/docs/get-started/tenant-settings).
</ParamField>

<ParamField body="resource" type="string">
  (Opcional) El identificador de la API de destino (servidor de recursos) a la que desea acceder. Debe coincidir con un identificador de API registrado en su inquilino de Auth0. Se usa como alternativa a `audience` cuando el [Perfil de compatibilidad del parámetro resource](https://auth0.com/docs/get-started/tenant-settings#settings-advanced) del inquilino está configurado en `compatibility`.
</ParamField>

<ParamField body="scope" type="string">
  (Opcional) El parámetro scope de OAuth2.
</ParamField>

<ParamField body="organization" type="string">
  (Opcional) La organización o el identificador con el que desea asociar la solicitud. Como alternativa, puede especificar un nombre de organización si [Use Organization Names in Authentication API](https://auth0.com/docs/manage-users/organizations/configure-organizations/use-org-name-authentication-api) está habilitado.
</ParamField>

<ParamField body="actor_token" type="string">
  (Opcional) Un token que identifica al actor que realiza la delegación en nombre del usuario sujeto. Debe proporcionarse junto con `actor_token_type`. Si está presente, no se emitirán tokens de actualización.
</ParamField>

<ParamField body="actor_token_type" type="string">
  (Opcional) El tipo del token del actor. Debe proporcionarse junto con `actor_token`. Para los tokens de ID de Auth0, use `urn:ietf:params:oauth:token-type:id_token` para la validación automática en el servidor (firma, expiración, emisor y búsqueda del usuario). Para otros valores, siga las mismas restricciones de espacio de nombres que `subject_token_type`.
</ParamField>

<div id="response-schema">
  ## Esquema de respuesta
</div>

<ResponseSchema>
  <ResponseField name="access_token" type="string">
    El token de acceso.
  </ResponseField>

  <ResponseField name="refresh_token" type="string">
    El token de actualización.
  </ResponseField>

  <ResponseField name="id_token" type="string">
    El token de ID.
  </ResponseField>

  <ResponseField name="token_type" type="string">
    El tipo de token.
  </ResponseField>

  <ResponseField name="issued_token_type" type="string">
    El tipo de token emitido.
  </ResponseField>

  <ResponseField name="expires_in" type="integer">
    La duración del token de acceso en segundos.
  </ResponseField>
</ResponseSchema>

<div id="response-messages">
  ## Mensajes de respuesta
</div>

| Estado | Descripción       |
| ------ | ----------------- |
| 200    | Respuesta exitosa |
