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

# Intercambio de tokens personalizado

> El intercambio de tokens personalizado permite a las aplicaciones intercambiar sus tokens existentes por tokens de Auth0.

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="Intercambio de tokens personalizado (CTE)" stage="ea" plans="B2C Professional, B2B Professional, and Enterprise" terms="true" />

El intercambio de tokens personalizado permite a las aplicaciones intercambiar sus tokens existentes por tokens de Auth0 al llamar al endpoint `/oauth/token`, tal como se define en [RFC 8693](https://datatracker.ietf.org/doc/html/rfc8693). Algunos casos de uso habituales del intercambio de tokens personalizado son:

* Obtener tokens de Auth0 para otra <Tooltip tip="Audiencia: identificador único de la audiencia de un token emitido. Llamado aud en un token, su valor contiene el ID de una aplicación (ID de cliente) para un ID Token o de una API (identificador de API) para un token de acceso." cta="Ver glosario" href="/es/docs/glossary?term=audience">audiencia</Tooltip>
* Integrarse con un <Tooltip tip="Proveedor de identidad (IdP): servicio que almacena y administra identidades digitales." cta="Ver glosario" href="/es/docs/glossary?term=identity+provider">proveedor de identidad</Tooltip> externo
* Migrar a Auth0
* Autorización delegada: una entidad principal (como un servicio, un agente de IA o un agente de soporte) actúa en nombre de un usuario

Para obtener más información, consulta [Casos de uso de ejemplo y muestras de código](/es/docs/authenticate/custom-token-exchange/cte-example-use-cases).

Cada solicitud de intercambio de tokens personalizado se asigna a un [perfil de intercambio de tokens personalizado](/es/docs/authenticate/custom-token-exchange/configure-custom-token-exchange#create-custom-token-exchange-profile), que está controlado por una [Action](/es/docs/customize/actions), donde puedes:

* Escribir código personalizado para decodificar y validar `subject_tokens` pasados al endpoint `/oauth/token`
* Autorizar el acceso y establecer el usuario para continuar con la transacción.

Puedes [configurar varios perfiles de intercambio de tokens personalizado](/es/docs/authenticate/custom-token-exchange/configure-custom-token-exchange#create-custom-token-exchange-profile) para una aplicación. Después de que el Servidor de autorización de Auth0 valide que la solicitud de intercambio de tokens personalizado es válida y se asigna a un perfil de intercambio de tokens personalizado existente, el [trigger de intercambio de tokens personalizado](/es/docs/customize/actions/explore-triggers/signup-and-login-triggers/custom-token-exchange-trigger) ejecuta la única Action asociada a ese perfil. A continuación, la aplicación puede aprovechar el intercambio de tokens personalizado para autenticarse y obtener tokens de acceso, de ID y de actualización de Auth0 para el usuario.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  El intercambio de tokens personalizado te ofrece la flexibilidad adicional de establecer el usuario para la transacción, asumiendo también la responsabilidad adicional de validar de forma segura el token de sujeto correspondiente que identifica al usuario en la transacción.

  Recuerda que los tokens de sujeto y de actor utilizados con el intercambio de tokens personalizado pueden tener cualquier formato o tipo de token que necesites, siempre que tu código de Action pueda interpretarlos. **Debes implementar una validación sólida de los tokens que recibes y aceptas.** Si no lo haces, te expones a distintos vectores de ataque, como la suplantación o los ataques de repetición, lo que puede permitir que actores maliciosos se autentiquen con el ID de usuario de otra persona o actúen en su nombre sin autorización.

  Para conocer las distintas opciones para implementar una validación segura de tus tokens de sujeto, consulta y aplica las recomendaciones incluidas en [Casos de uso de ejemplo y muestras de código](/es/docs/authenticate/custom-token-exchange/cte-example-use-cases). Asegúrate también de tener en cuenta y aplicar las capacidades de [protección contra ataques](/es/docs/authenticate/custom-token-exchange/cte-attack-protection).
</Callout>

<div id="tenant-logs">
  ## Registros del inquilino
</div>

Cada transacción de intercambio de tokens personalizado genera un evento en el registro del inquilino:

* Transacciones exitosas: registros `secte`
* Transacciones fallidas: registros `fecte`

Cuando se establece un actor mediante `setActor()`, la propiedad `actor` (que contiene `sub` y cualquier `actor` anidado) se incluye en las entradas de registro `secte` con fines de auditoría.

Use los registros del inquilino para solucionar cualquier problema que encuentre con el intercambio de tokens.

<div id="limitations">
  ## Limitaciones
</div>

intercambio de tokens personalizado no admite lo siguiente:

* Métodos de la API de MFA `api.authentication.challengeWith()` y `api.authentication.EnrollWith()`
* Las conexiones de base de datos personalizadas con el modo de importación `ON` no son compatibles con las operaciones `setUserByConnection()`
* Clientes de terceros y clientes que no cumplen con OIDC
* La API de destino debe tener habilitada la opción **Allow Skipping User Consent**, ya que no es posible recopilar el consentimiento en un flujo no interactivo.
