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

> Describe los tipos de tokens relacionados con la identidad y la autenticación, y cómo los usa Auth0.

# Tokens

export const AuthCodeBlock = ({filename, icon, language, highlight, children}) => {
  const [displayText, setDisplayText] = useState(children);
  const [copyText, setCopyText] = useState(children);
  const wrapperRef = React.useRef(null);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      if (!window.autorun || !window.rootStore) {
        return;
      }
      unsubscribe = window.autorun(() => {
        let processedChildrenForDisplay = children;
        let processedChildrenForCopy = children;
        for (const [key, value] of window.rootStore.variableStore.values.entries()) {
          const escapedKey = key.replaceAll(/[.*+?^${}()|[\]\\]/g, (String.raw)`\$&`);
          let displayValue = value;
          if (key === "{yourClientSecret}" && value !== "{yourClientSecret}") {
            displayValue = value.substring(0, 3) + "*****ENMASCARADO*****";
          }
          processedChildrenForDisplay = processedChildrenForDisplay.replaceAll(new RegExp(escapedKey, "g"), displayValue);
          processedChildrenForCopy = processedChildrenForCopy.replaceAll(new RegExp(escapedKey, "g"), value);
        }
        setDisplayText(processedChildrenForDisplay);
        setCopyText(processedChildrenForCopy);
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  useEffect(() => {
    if (!wrapperRef.current) return;
    const originalWriteText = navigator.clipboard.writeText.bind(navigator.clipboard);
    let isOverriding = false;
    const handleClick = e => {
      const button = e.target.closest('[data-testid="copy-code-button"]');
      if (!button || !wrapperRef.current.contains(button)) return;
      isOverriding = true;
      navigator.clipboard.writeText = text => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
          return originalWriteText(copyText);
        }
        return originalWriteText(text);
      };
      setTimeout(() => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
        }
      }, 100);
    };
    const wrapper = wrapperRef.current;
    wrapper.addEventListener('click', handleClick, true);
    return () => {
      wrapper.removeEventListener('click', handleClick, true);
      if (navigator.clipboard.writeText !== originalWriteText) {
        navigator.clipboard.writeText = originalWriteText;
      }
    };
  }, [copyText]);
  return <div ref={wrapperRef}>
      <CodeBlock filename={filename} icon={icon} language={language} lines highlight={highlight}>
        {displayText}
      </CodeBlock>
    </div>;
};

Hay dos tipos de tokens relacionados con la identidad: <Tooltip tip="ID Token: Credencial destinada al cliente en sí, no al acceso a un recurso." cta="Ver glosario" href="/es/docs/glossary?term=ID+tokens">tokens de ID</Tooltip> y <Tooltip tip="ID Token: Credencial destinada al cliente en sí, no al acceso a un recurso." cta="Ver glosario" href="/es/docs/glossary?term=access+tokens">tokens de acceso</Tooltip>.

<div id="id-tokens">
  ## ID tokens
</div>

Los [token de ID](/es/docs/secure/tokens/id-tokens) son [JSON web tokens (JWTs)](/es/docs/secure/tokens/json-web-tokens) destinados exclusivamente al uso de la aplicación. Por ejemplo, si una aplicación usa Google para que los usuarios inicien sesión y para sincronizar sus calendarios, Google envía un token de ID a la aplicación que incluye información sobre el usuario. Luego, la aplicación analiza el [contenido del token](https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims) y usa esa información (incluidos detalles como el nombre y la foto de perfil) para personalizar la experiencia del usuario.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Asegúrese de [validar los token de ID](/es/docs/secure/tokens/id-tokens/validate-id-tokens) antes de usar la información que contienen. Puede usar una [biblioteca](https://jwt.io/#libraries-io) para facilitar esta tarea.
</Callout>

**No** use token de ID para acceder a una API. Cada token contiene información para la <Tooltip tip="Audiencia: Identificador único de la audiencia de un token emitido. Se denomina aud en un token y 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> prevista (que normalmente es el destinatario). Según la especificación de <Tooltip tip="Audiencia: Identificador único de la audiencia de un token emitido. Se denomina aud en un token y 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=OpenID">OpenID</Tooltip> Connect, la audiencia del token de ID (indicada por el claim **aud**) debe ser el <Tooltip tip="ID de cliente: Valor de identificación asignado a su recurso registrado en Auth0." cta="Ver glosario" href="/es/docs/glossary?term=client+ID">ID de cliente</Tooltip> de la aplicación que realiza la solicitud de autenticación. Si no es así, no debe confiar en el token.

El contenido decodificado de un token de ID tiene el siguiente aspecto:

export const codeExample1 = `{
  "iss": "http://{yourDomain}/",
  "sub": "auth0|123456",
  "aud": "{yourClientId}",
  "exp": 1311281970,
  "iat": 1311280970,
  "name": "Jane Doe",
  "given_name": "Jane",
  "family_name": "Doe",
  "gender": "female",
  "birthdate": "0000-10-31",
  "email": "janedoe@example.com",
  "picture": "http://example.com/janedoe/me.jpg"
}`;

<AuthCodeBlock children={codeExample1} language="json" />

Este token autentica al usuario ante la aplicación. La audiencia (la claim **aud**) del token se establece en el identificador de la aplicación, lo que significa que solo esta aplicación específica debe consumir este token.

Por el contrario, una API espera un token cuyo valor de **aud** sea igual al identificador único de la API. Por lo tanto, a menos que controles tanto la aplicación como la API, enviar un token de ID a una API por lo general no funcionará. Como el token de ID no está firmado por la API, la API no tendría forma de saber si la aplicación hubiera modificado el token (por ejemplo, añadiendo más alcances) si aceptara el token de ID. Consulta el [JWT Handbook](https://auth0.com/resources/ebooks/jwt-handbook) para obtener más información.

<div id="access-tokens">
  ## Tokens de acceso
</div>

[Tokens de acceso](/es/docs/secure/tokens/access-tokens) (que no siempre son <Tooltip tip="JSON Web Token (JWT): formato estándar de ID Token (y, a menudo, de Token de acceso) utilizado para representar claims de forma segura entre dos partes." cta="Ver glosario" href="/es/docs/glossary?term=JWTs">JWTs</Tooltip>) se utilizan para informar a una API de que el portador del token ha sido autorizado para acceder a la API y realizar un conjunto predeterminado de acciones (según los **alcances** concedidos).

En el ejemplo de Google anterior, Google envía un token de acceso a la aplicación después de que el usuario inicia sesión y da su consentimiento para que la aplicación lea o escriba en su Google Calendar. Cada vez que la aplicación quiere escribir en Google Calendar, envía una solicitud a la API de Google Calendar e incluye el token de acceso en el encabezado HTTP **Authorization**.

Los tokens de acceso **nunca** deben usarse para la [autenticación](/es/docs/authenticate). Los tokens de acceso no pueden indicar si el usuario se ha autenticado. La única información del usuario que contiene el token de acceso es el id del usuario, ubicado en el claim **sub**. En sus aplicaciones, trate los tokens de acceso como cadenas opacas, ya que están pensados para las API. Su aplicación no debe intentar decodificarlos ni esperar recibir tokens en un formato específico.

Aquí tiene un ejemplo de un token de acceso:

export const codeExample2 = `{
  "iss": "https://{yourDomain}/",
  "sub": "auth0|123456",
  "aud": [
    "my-api-identifier",
    "https://{yourDomain}/userinfo"
  ],
  "azp": "{yourClientId}",
  "exp": 1489179954,
  "iat": 1489143954,
  "scope": "openid profile email address phone read:appointments"
}`;

<AuthCodeBlock children={codeExample2} language="json" />

Tenga en cuenta que el token no contiene ninguna información sobre el usuario aparte de su ID (claim **sub**). Solo contiene información de autorización sobre las acciones que la aplicación puede realizar en la API (claim **scope**). Esto es lo que lo hace útil para proteger una API, pero no para autenticar a un usuario.

En algunas situaciones, puede ser conveniente incluir información adicional sobre el usuario u otros claims personalizados, además del claim sub, en el token de acceso para evitar que la API tenga que hacer trabajo adicional para obtener detalles sobre el usuario. Si decide hacerlo, tenga presente que estos claims adicionales podrán leerse en el token de acceso. Para obtener más información, consulte [Create Custom Claims](/es/docs/secure/tokens/json-web-tokens/create-custom-claims).

<div id="specialized-tokens">
  ## Tokens especializados
</div>

Hay tres tokens especializados que se usan en los escenarios de autenticación basada en tokens de Auth0:

* **<Tooltip tip="Token de actualización: Token que se usa para obtener un nuevo Token de acceso sin obligar a los usuarios a volver a iniciar sesión." cta="Ver glosario" href="/es/docs/glossary?term=Refresh+tokens">Tokens de actualización</Tooltip>**: Un token que se usa para obtener un nuevo token de acceso sin tener que volver a autenticar al usuario.
* **<Tooltip tip="Proveedor de identidad (IdP): Servicio que almacena y administra identidades digitales." cta="Ver glosario" href="/es/docs/glossary?term=IDP">IDP</Tooltip> tokens de acceso**: Tokens de acceso emitidos por proveedores de identidad después de la autenticación del usuario, que puede usar para llamar a APIs de terceros.
* **Auth0 <Tooltip tip="Management API: Un producto que permite a los clientes realizar tareas administrativas." cta="Ver glosario" href="/es/docs/glossary?term=Management+API">Management API</Tooltip> tokens de acceso**: Tokens de corta duración que contienen claims específicos (alcances) y le permiten llamar a los endpoints de la Management API.

<div id="learn-more">
  ## Más información
</div>

* [JSON Web Tokens](/es/docs/secure/tokens/json-web-tokens)
* [Tokens de ID](/es/docs/secure/tokens/id-tokens)
* [Tokens de acceso](/es/docs/secure/tokens/access-tokens)
* [Tokens de actualización](/es/docs/secure/tokens/refresh-tokens)
* [Almacenamiento de tokens](/es/docs/secure/security-guidance/data-security/token-storage)
* [Prácticas recomendadas para tokens](/es/docs/secure/tokens/token-best-practices)
