> ## 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.

> Aprenda a configurar Custom Token Exchange asociando una Action a un perfil de token personalizado.

# Configurar Custom Token Exchange

export const ReleaseStageNotice = ({feature, stage, plans, contact, terms}) => {
  const stageTextMap = {
    "beta": "Beta",
    "ea": "Acceso anticipado"
  };
  const stageText = stageTextMap[stage] || "una etapa de lanzamiento del producto";
  const prsLink = "/docs/troubleshoot/product-lifecycle/product-release-stages";
  const linkify = (text, url) => {
    return <a href={url} target="_blank" rel="noreferrer" class="link">{text}</a>;
  };
  const includeDetails = (plans, contact, terms) => {
    const hasDetails = terms || plans || contact;
    if (!hasDetails) return null;
    return <span data-as="p">
            {plans && <>Esta funcionalidad está disponible en los {linkify(`planes ${plans}`, "https://auth0.com/pricing")}. </>}
            {contact && "Para participar, ponte en contacto con " + contact + ". "}
            {terms && <>Al usar esta funcionalidad, aceptas los términos aplicables de la prueba gratuita incluidos en el {linkify("Master Subscription Agreement", "https://www.okta.com/legal")} de Okta.</>}
        </span>;
  };
  return <Warning>
            <span data-as="p">
                <strong>La funcionalidad {feature} está en {linkify(stageText, prsLink)}.</strong>
            </span>

            {includeDetails(plans, contact, terms)}
        </Warning>;
};

<ReleaseStageNotice feature="Custom Token Exchange (CTE)" stage="ea" plans="B2C Professional, B2B Professional, and Enterprise" terms="true" />

Para configurar Custom Token Exchange en tu aplicación, debes hacer lo siguiente:

* [Completar los requisitos previos](#prerequisites)
* [Habilitar Custom Token Exchange en tu aplicación](#enable-custom-token-exchange-for-your-application)
* [Configurar](#configure-custom-token-exchange-profile) y [administrar](#manage-custom-token-exchange-profile) un perfil personalizado de intercambio de tokens

<div id="prerequisites">
  ## Requisitos previos
</div>

Antes de configurar el Custom Token Exchange, asegúrate de que tu aplicación cumpla con los siguientes requisitos:

* Sea un cliente propio
* Sea compatible con OIDC

Para configurar tu aplicación, ve a **[Applications > Advanced Settings > OAuth](https://auth0.com/docs/get-started/applications/application-settings#oauth)** en el Auth0 Dashboard.

<div id="enable-custom-token-exchange-for-your-application">
  ## Habilite Custom Token Exchange para su aplicación
</div>

Para habilitar Custom Token Exchange, [cree una nueva aplicación](/es/docs/get-started/auth0-overview/create-applications) o actualice una existente mediante Auth0 Dashboard o la Management API. Puede crear varias aplicaciones para usar Custom Token Exchange.

Cuando cree una nueva aplicación:

1. De forma predeterminada, Custom Token Exchange está deshabilitado. Para habilitar Custom Token Exchange, use la Management API para realizar una llamada `POST` a [Create a Client](https://auth0.com/docs/api/management/v2/clients/post-clients) o una llamada `PATCH` a [Update a Client](https://auth0.com/docs/api/management/v2/clients/patch-clients-by-id). Establezca el atributo `allow_any_profile_of_type` de `token_exchange` en `["custom_authentication"]`:

```json lines theme={null}
{
  "token_exchange": {
    "allow_any_profile_of_type": ["custom_authentication"]
  }
}
```

2. Habilite la conexión que quiera usar con Custom Token Exchange para la aplicación.
3. Asegúrese de que su aplicación esté marcada como [First-Party](/es/docs/get-started/applications/first-party-and-third-party-applications) y configurada para ser compatible con OIDC en **[Dashboard > Applications > Advanced Settings > OAuth](/es/docs/get-started/applications/application-settings#oauth)**.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Las bases de datos personalizadas con el modo de importación `ON` solo son compatibles con operaciones `setUserById()`.
</Callout>

Una vez creada la aplicación, anote el `client_id` y el `client_secret` para usarlos más adelante al llamar al endpoint `/oauth/token`.

<div id="configure-custom-token-exchange-profile">
  ## Configurar el perfil de Custom Token Exchange
</div>

Cada perfil de Custom Token Exchange establece una correspondencia uno a uno entre un `subject_token_type` y una Action, que contiene la lógica de código para un caso de uso específico.

Las solicitudes de Custom Token Exchange enviadas al endpoint `/oauth/token` con un valor `subject_token_type` específico se asignarán al perfil de Custom Token Exchange correspondiente y se enrutarán a la Action asociada para su procesamiento.

Para crear un perfil de Custom Token Exchange, debe hacer lo siguiente:

1. [Crear una Action para el perfil](#create-action-for-the-profile)
2. [Crear el perfil de Custom Token Exchange](#create-custom-token-exchange-profile)
3. [Administrar el perfil de Custom Token Exchange](#manage-custom-token-exchange-profile)

<div id="create-action-for-the-profile">
  ### Crear una Action para el perfil
</div>

Usa los objetos Event y API de Custom Token Exchange para escribir una Action que:

* Decodifique y valide el `subject_token` según el `subject_token_type`. Esto te proporcionará información sobre el usuario para la transacción.
* Aplique cualquier política de autorización que necesites para la transacción.

Una vez que confirmes que la transacción puede continuar, establece el usuario. Auth0 emitirá entonces tokens de acceso, de ID y de actualización para este usuario como forma de autenticación.

Para ver ejemplos de Actions de Custom Token Exchange, consulta [Casos de uso de ejemplo y muestras de código](/es/docs/authenticate/custom-token-exchange/cte-example-use-cases).

Una vez que hayas escrito tu Action, agrégala y despliégala en el Auth0 Dashboard.

1. Ve a **Actions > Library**.
2. Selecciona **Create Action > Build from Scratch**.
3. En el cuadro de diálogo **Create Action**, introduce un nombre y selecciona el trigger **Custom Token Exchange** en el menú desplegable.

<Frame>
  <img src="https://mintcdn.com/translations/eVsQcTnbClN-oB7d/docs/images/cdy7uua7fh8z/22vz9dsCFj5Ruot7U0HIVx/1c3dc4b562334dab9d6ac415028ea76e/Screenshot_2025-02-05_at_8.48.34_AM.png?fit=max&auto=format&n=eVsQcTnbClN-oB7d&q=85&s=f6f64e6e8208a914cf5f7d73e4a47ada" alt="" width="400" height="440" data-path="docs/images/cdy7uua7fh8z/22vz9dsCFj5Ruot7U0HIVx/1c3dc4b562334dab9d6ac415028ea76e/Screenshot_2025-02-05_at_8.48.34_AM.png" />
</Frame>

4. Selecciona **Create**.
5. Haz clic en **Deploy** para implementar la Action.

<Frame>
  <img src="https://mintcdn.com/translations/MV7tE-x71x8RWRES/docs/images/cdy7uua7fh8z/56NZA69Gmzha167xfgRD0W/302e59276815d2e2644ab2da3b9b5f1f/Screenshot_2025-02-03_at_10.29.17_AM.png?fit=max&auto=format&n=MV7tE-x71x8RWRES&q=85&s=7b29ab5bb0bb3ce0075837f48592ab6b" alt="" width="1244" height="574" data-path="docs/images/cdy7uua7fh8z/56NZA69Gmzha167xfgRD0W/302e59276815d2e2644ab2da3b9b5f1f/Screenshot_2025-02-03_at_10.29.17_AM.png" />
</Frame>

Después de desplegar la Action, copia el ID de la Action que Auth0 le haya asignado. Aún tienes que agregar tu lógica personalizada a la Action. Primero, obtén el ID de la Action para crear el perfil personalizado de intercambio de tokens.

6. Para obtener el ID de la Action en el Auth0 Dashboard, ve a la URL de la ventana del navegador. El ID de la Action debe ser la última parte de la URL, como se muestra en la siguiente imagen:

<Frame>
  <img src="https://mintcdn.com/translations/eVsQcTnbClN-oB7d/docs/images/cdy7uua7fh8z/1Xx4UbgZR0FIuLC1KVvhKG/bde4469d770c2ff8d37c19895a0c8e66/Screenshot_2025-02-03_at_10.31.18_AM.png?fit=max&auto=format&n=eVsQcTnbClN-oB7d&q=85&s=da53b4a079e0f2338b54db38647b3c24" alt="" width="1244" height="558" data-path="docs/images/cdy7uua7fh8z/1Xx4UbgZR0FIuLC1KVvhKG/bde4469d770c2ff8d37c19895a0c8e66/Screenshot_2025-02-03_at_10.31.18_AM.png" />
</Frame>

También puedes obtener el ID de la Action mediante la Management API. Primero, obtén un token de la Management API para consumir la API. Luego, realiza la siguiente solicitud `GET` al endpoint `/actions`:

```bash lines theme={null}
curl --location 'https://{yourDomain}/api/v2/actions/actions?actionName={yourActionName}' \
--header 'Authorization: Bearer <YOUR_MANAGEMENT_API_TOKEN>' \
```

Deberías recibir el ID de la Action en el cuerpo de la respuesta, dentro de `actions[0].id.` Necesitas el ID de la Action para crear el perfil personalizado de intercambio de tokens.

<div id="create-custom-token-exchange-profile">
  ### Crear un perfil personalizado de intercambio de tokens
</div>

Para crear el perfil personalizado de intercambio de tokens, use la Management API para realizar una solicitud `POST` al endpoint `/token-exchange-profiles` con los siguientes parámetros:

```bash lines theme={null}
curl --location 'https://{yourDomain}/api/v2/token-exchange-profiles' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <YOUR_MANAGEMENT_API_TOKEN>' \
--data '{
    "name": "<YOUR_PROFILE_NAME>",
    "subject_token_type": "<YOUR_UNIQUE_PROFILE_TOKEN_TYPE_URI>",
    "action_id": "<YOUR_ACTION_ID>",
    "type": "custom_authentication"
}'
```

| Parámetro            | Descripción                                                                                                                                                                                                                                                                                                                                              |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `subject_token_type` | URI única del tipo de token de perfil que comienza con `https://` o `urn`<br /><br />Los siguientes espacios de nombres están reservados y no se pueden usar:<br /><br /><ul><li>`http://auth0.com`</li><li>`https://auth0.com`</li><li>`http://okta.com`</li><li>`https://okta.com`</li><li>`urn:ietf`</li><li>`urn:auth0`</li><li>`urn:okta`</li></ul> |
| `action_id`          | ID de la Action asociada al perfil personalizado de intercambio de tokens.                                                                                                                                                                                                                                                                               |
| `type`               | Debe establecerse como `custom_authentication`.                                                                                                                                                                                                                                                                                                          |

Si creó correctamente un perfil personalizado de intercambio de tokens, debería recibir una respuesta como la siguiente:

```json lines theme={null}
{
  "id":"tep_9xqewuejpa2RTltf",
  "name":"<YOUR_PROFILE_NAME>",
  "type":"custom_authentication",
  "subject_token_type":"<YOUR_UNIQUE_PROFILE_TOKEN_TYPE_URI>",
  "action_id":"<YOUR_ACTION_ID>",
  "created_at":"2025-01-30T13:19:00.616Z",
  "updated_at":"2025-01-30T13:19:00.616Z"
}
```

<div id="manage-custom-token-exchange-profile">
  ### Administrar el perfil personalizado de intercambio de token
</div>

Para administrar su perfil personalizado de intercambio de token, use la Management API para realizar solicitudes al endpoint `/token-exchange-profiles`.

Para obtener todos sus perfiles personalizados de intercambio de token, realice la siguiente solicitud `GET` al endpoint `/token-exchange-profiles`. El endpoint `/token-exchange-profiles` admite paginación mediante checkpoints si tiene varios perfiles.

```bash lines theme={null}
curl --location 'https://{yourDomain}/api/v2/token-exchange-profiles' \
--header 'Authorization: Bearer <YOUR_MANAGEMENT_API_TOKEN>' \
```

Para actualizar el nombre o el `subject_token_type` de un perfil existente, realice la siguiente solicitud `PATCH` al endpoint `/token-exchange-profiles`.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Una vez creada la Action, no puede modificar su ID.
</Callout>

```bash lines theme={null}
curl --location --request PATCH 'https://{yourDomain}/api/v2/token-exchange-profiles/{yourProfileId}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <YOUR_MANAGEMENT_API_TOKEN>' \
--data '{
    "name": "external-idp-migration",
    "subject_token_type": "urn:partner0:external-idp-migration"
}'
```

Para eliminar un perfil de intercambio de Token personalizado, realiza la siguiente solicitud `DELETE` al endpoint `/token-exchange-profiles`:

```bash lines theme={null}
curl --location --request DELETE 'https://{yourDomain}/api/v2/token-exchange-profiles/{yourProfileId}' \
--header 'Authorization: Bearer <YOUR_MANAGEMENT_API_TOKEN>' \
--data ''
```
