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

# Revocar tokens de actualización

> Aprenda a revocar un token de actualización si se ve comprometido mediante el Auth0 Dashboard, la Authentication API o la Management API.

export const AuthCodeGroup = ({children, dropdown}) => {
  const [processedChildren, setProcessedChildren] = useState(children);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      unsubscribe = window.autorun(() => {
        const processChildren = node => {
          if (typeof node === "string") {
            let processedNode = node;
            for (const [key, value] of window.rootStore.variableStore.values.entries()) {
              const escapedKey = key.replaceAll(/[.*+?^${}()|[\]\\]/g, (String.raw)`\$&`);
              processedNode = processedNode.replaceAll(new RegExp(escapedKey, "g"), value);
            }
            return processedNode;
          } else if (Array.isArray(node)) {
            return node.map(processChildren);
          } else if (node && node.props && node.props.children) {
            return {
              ...node,
              props: {
                ...node.props,
                children: processChildren(node.props.children)
              }
            };
          }
          return node;
        };
        setProcessedChildren(processChildren(children));
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  return <CodeGroup dropdown={dropdown}>{processedChildren}</CodeGroup>;
};

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>;
};

Puede revocar los <Tooltip tip="Token de actualización: token utilizado 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> si se ven comprometidos. Auth0 gestiona la revocación de tokens como si el token pudiera haber quedado expuesto a actores maliciosos.

Además, puede considerar habilitar la [rotación de tokens de actualización](/es/docs/secure/tokens/refresh-tokens/refresh-token-rotation) para que, cada vez que un cliente intercambie un token de actualización para obtener un nuevo token de acceso, también se devuelva un nuevo token de actualización.

<div id="choose-whether-token-revocation-deletes-grants">
  ## Elija si la revocación de tokens elimina las concesiones
</div>

Una concesión proporciona a una aplicación acceso a un recurso de otra entidad sin exponer las credenciales del usuario. Los tokens se emiten en el contexto de una concesión.

Cuando se revoca una concesión, también se revocan todos los tokens emitidos en el contexto de esa concesión. Sin embargo, cuando se revoca un token, no es necesario revocar también la concesión.

Puede elegir si la revocación de tokens elimina la concesión asociada en la configuración de su inquilino:

1. Vaya a [Dashboard > Tenant Settings > Advanced](https://manage.auth0.com/#/tenant/advanced).

2. En la sección **Settings**, habilite o deshabilite el interruptor **Refresh Token Revocation Deletes Grant**.

   * Habilite el interruptor para eliminar la concesión subyacente cuando revoque el token de actualización.

   Cada solicitud de revocación invalida todos los demás tokens basados en la misma concesión de autorización, lo que revoca todos los tokens de actualización emitidos para el mismo usuario, aplicación y audiencia.

   * Deshabilite el interruptor para conservar la concesión subyacente cuando revoque el token de actualización.

   Cuando se desvincula un dispositivo, solo se revoca el token de actualización asociado, y la concesión permanece intacta.

Esta función está deshabilitada de forma predeterminada para todos los inquilinos creados después del 13 de enero de 2021.

<div id="revoke-a-refresh-token">
  ## Revocar un token de actualización
</div>

Puede revocar un token de actualización de las siguientes formas:

* [Mediante Auth0 Dashboard](#using-the-auth0-dashboard)
* [Mediante Authentication API](#using-the-authenticaton-api)
* [Mediante Management API](#using-the-management-api)

<div id="using-the-auth0-dashboard">
  ### Uso del Auth0 Dashboard
</div>

Puede usar el Auth0 Dashboard para revocar el acceso autorizado de un usuario a la aplicación que emitió el token. Esto invalida el Token de actualización, lo cual es funcionalmente equivalente a revocar el propio token.

1. Vaya a [Dashboard > User Management > Users](https://manage.auth0.com/#/users) y seleccione el nombre del usuario para ver sus detalles.
2. Seleccione la pestaña **Authorized Applications**. Esta página muestra todas las aplicaciones a las que el usuario ha autorizado el acceso.
3. Para revocar el acceso del usuario a una aplicación autorizada y, con ello, invalidar el Token de actualización, haga clic en **Revoke**.

<div id="using-the-authentication-api">
  ### Uso de la Authentication API
</div>

Puede usar el [endpoint para revocar un token de actualización](https://auth0.com/docs/api/authentication/revoke-refresh-token/revoke-refresh-token) de la Authentication API para revocar un token de actualización.

El endpoint permite el acceso sin el <Tooltip tip="Secreto del cliente: secreto que usa un cliente (aplicación) para autenticarse con el Servidor de autorización; solo el cliente y el Servidor de autorización deben conocerlo, y debe ser lo suficientemente aleatorio como para que no se pueda adivinar." cta="Ver glosario" href="/es/docs/glossary?term=client+secret">secreto del cliente</Tooltip> en aplicaciones que no pueden mantenerlo protegido (como las aplicaciones nativas). La propia aplicación debe tener su [método de autenticación](/es/docs/get-started/applications/credentials) (`tokenEndpointAuthMethod`) configurado como none.

Cuando realiza una solicitud, la API primero valida las credenciales de la aplicación y luego verifica si el token se emitió para la aplicación que hace la solicitud de revocación. Si esta validación falla, la solicitud se rechaza y se informa a la aplicación del error.

A continuación, la API invalida el token. La invalidación se realiza de inmediato y el token no puede volver a usarse después de la revocación. Cada solicitud de revocación invalida todos los tokens que se han emitido para la misma concesión de autorización.

Para obtener más información, incluidos los parámetros del cuerpo, los esquemas de respuesta y ejemplos de código, consulte la documentación de la Authentication API del [endpoint para revocar un token de actualización](https://auth0.com/docs/api/authentication/revoke-refresh-token/revoke-refresh-token).

<div id="using-the-management-api-device-credentials-endpoints">
  ### Uso de los endpoints de credenciales de dispositivo de Management API
</div>

Para revocar un token de actualización mediante los endpoints de credenciales de dispositivo de Auth0 Management API:

1. Obtén el `id` del token de actualización que quieres revocar mediante el [endpoint Retrieve device credentials](https://auth0.com/docs/api/management/v2/device-credentials/get-device-credentials).

   Especifica `type=refresh_token` y un `user_id`, con un token de acceso que contenga el scope `read:device_credentials`. Para limitar los resultados, también puedes especificar el `client_id` asociado al token (si se conoce).

2. Revoca el token de actualización mediante el [endpoint Delete a device credential](https://auth0.com/docs/api/management/v2/device-credentials/delete-device-credentials-by-id). Especifica un token de acceso que contenga el scope `delete:device_credentials` y el ID del token de actualización.

<div id="using-the-management-api-refresh-token-endpoints">
  ### Uso de los endpoints de tokens de actualización de la Management API
</div>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Los endpoints de tokens de actualización de la Auth0 Management API actualmente solo están disponibles para clientes con planes Enterprise. Para obtener más información, consulta [Pricing](https://auth0.com/pricing).
</Callout>

Los endpoints de tokens de actualización de la Management API sustituyen a los endpoints del recurso `/v2/device-credentials` y ofrecen propiedades ampliadas y operaciones de revocación masiva.

Puedes consultar o revocar un Token de actualización específico con los siguientes endpoints:

* Consultar la información de un Token de actualización por id con el endpoint [Get a refresh token](https://auth0.com/docs/api/management/v2/refresh-tokens/get-refresh-token)
* Revocar un Token de actualización por id con el endpoint [Delete a refresh token](https://auth0.com/docs/api/management/v2/refresh-tokens/delete-refresh-token)
* Enumerar todos los tokens de actualización de un usuario con el endpoint [Get refresh tokens for a user](https://auth0.com/docs/api/management/v2/users/get-refresh-tokens-for-user)
* Revocar todos los tokens de actualización de un usuario con el endpoint [Delete refresh tokens for a user](https://auth0.com/docs/api/management/v2/users/delete-refresh-tokens-for-user)

<div id="considerations-and-limitations">
  ## Consideraciones y limitaciones
</div>

* Con el [flujo de autorización de dispositivos](/es/docs/get-started/authentication-and-authorization-flow/device-authorization-flow), la única forma de forzar que un dispositivo se vuelva a autorizar es revocar el Token de actualización asignado al dispositivo. No se forzará al dispositivo a volver a autorizarse hasta que el Token de acceso actual caduque y la aplicación intente usar el Token de actualización revocado. Para obtener más información, consulte [Desvincular dispositivos de los usuarios](/es/docs/manage-users/user-accounts/unlink-devices-from-users).

* Al usar la [rotación de tokens de actualización](/es/docs/secure/tokens/refresh-tokens/refresh-token-rotation), si se usa un token invalidado previamente, se revocará de inmediato todo el conjunto de tokens de actualización emitidos desde que se emitió ese token invalidado, lo que obligará al usuario final a volver a autenticarse.

* Las operaciones de revocación (`DELETE`) de tokens de actualización se ejecutan de forma asíncrona y tienen consistencia eventual.

* Los tokens de actualización emitidos el 21-09-2023 o después (22-02-2024 para los inquilinos de la región US-3) contienen la propiedad de identificador de sesión (`session_id`) con el valor correspondiente. Los tokens de actualización emitidos antes de esta fecha contienen esta propiedad con un valor `null`.

Para obtener más información sobre las limitaciones de los tokens de actualización, consulte [Limitaciones de los tokens de actualización](/es/docs/secure/tokens/refresh-tokens).
