> ## 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 cómo configurar el uso compartido de recursos entre distintos orígenes (CORS) para una aplicación registrada en Auth0 mediante el Auth0 Dashboard.

# Configurar el uso compartido de recursos entre distintos orígenes

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

<Card title="Antes de comenzar">
  * Por motivos de seguridad, la URL de origen de su aplicación debe estar incluida entre las URL aprobadas. Si todavía no la agregó a **Allowed Callback URLs** de su aplicación, deberá agregarla a la lista de **Allowed Origins (CORS)**.
  * Asegúrese de que **Allowed Web Origins** en la vista **Settings** de su aplicación esté configurado con el dominio desde el que se realiza la solicitud. Las URL pueden contener comodines para subdominios, pero no pueden contener rutas relativas después de la URL del dominio. Para obtener más información, lea [Marcadores de posición para subdominios](/es/docs/get-started/applications/wildcards-for-subdomains).
  * Si no habilita [dominios personalizados](/es/docs/customize/custom-domains), deberá crear una página de verificación que use Auth0.js como mecanismo de respaldo para la autenticación entre orígenes.
</Card>

El uso compartido de recursos entre orígenes (CORS) es un mecanismo que permite que una aplicación cargue datos (recursos) desde un dominio (origen) distinto de aquel en el que está alojada. Una política de CORS es una excepción explícita a la política del mismo origen, común en las aplicaciones web.

Por ejemplo, si quisiera que su aplicación (app.mydomain.com) cargara una fuente de Google (fonts.google.com) en segundo plano mediante Ajax, tendría que configurar CORS.

<div id="configure-cross-origin-authentication">
  ## Configurar la autenticación entre orígenes
</div>

1. Vaya a [Dashboard > Applications > Applications](https://manage.auth0.com/#/applications) y haga clic en el nombre de la aplicación para abrirla.
2. En **Cross-Origin Authentication**, active **Allow Cross-Origin Authentication**.
3. Busque **Allowed Origins (CORS)** e introduzca la URL de origen de su aplicación. Para obtener más información sobre los orígenes, consulte [Origin on Mozilla MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin).
4. Haga clic en **Save Changes**.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Si no necesita usar CORS en su aplicación, asegúrese de que **Allow Cross-Origin Authentication** esté desactivado.
</Callout>

<div id="create-cross-origin-verification-page">
  ## Crear una página de verificación entre orígenes
</div>

Hay casos en los que las cookies de terceros no estarán disponibles. Algunas versiones de navegadores no admiten cookies de terceros y, aun cuando las admiten, es posible que estén deshabilitadas en la configuración del usuario.

En los [navegadores compatibles](#browser-testing-support), puede usar el método `crossOriginVerification` del [SDK de Auth0.js](/es/docs/libraries/auth0js) en una página específica de su aplicación para gestionar los casos en los que las cookies de terceros estén deshabilitadas.

En los navegadores no compatibles, como Chrome, Opera y Safari, la autenticación entre orígenes no funcionará cuando las cookies de terceros estén deshabilitadas, a menos que habilite [dominios personalizados](/es/docs/customize/custom-domains).

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  En **Safari**, esta configuración aparece como "Prevent cross-site tracking" y usa [Intelligent Tracking Prevention](https://webkit.org/blog/7675/intelligent-tracking-prevention/). Lamentablemente, esto también impide que las cookies de terceros resulten útiles en escenarios de autenticación. Este es un ejemplo de cómo afecta a la [renovación de tokens en Safari](https://support.auth0.com/center/s/article/troubleshoot-auth0-token-renewal-issues-in-safari-with-itp-enabled).
</Callout>

1. Cree una página en su aplicación que instancie `WebAuth` de [Auth0.js](/es/docs/libraries/auth0js). Llame a `crossOriginVerification` de inmediato. Puede asignarle el nombre que prefiera.

export const codeExample = `   <!-- callback-cross-auth.html -->

<head>
  <script src="https://cdn.auth0.com/js/auth0/9.11/auth0.min.js"></script>
  <script type="text/javascript">
    var auth0Client = new auth0.WebAuth({
      clientID: '{yourClientId}',
      domain: '{yourDomain}'
    });
    auth0Client.crossOriginVerification();
  </script>
</head>
`;

<AuthCodeBlock children={codeExample} language="text" />

Cuando las cookies de terceros no están disponibles, Auth0.js renderiza un iframe para invocar un flujo de verificación de autenticación entre orígenes distinto.
2\. Vaya a [Dashboard > Applications > Applications](https://manage.auth0.com/#/applications) y seleccione la aplicación que quiere ver.
3\. En **Cross-Origin Authentication**, agregue la URL de la página de callback que creó en el campo **Cross-Origin Verification Fallback URL**.

<Warning>
  En entornos de producción, verifique que la URL de la página no apunte a `localhost`. La página debe estar en el mismo dominio en el que se aloja el formulario de inicio de sesión integrado y debe usar el esquema `https`.
</Warning>

4. Haga clic en **Save Changes**.

Para obtener más detalles, consulte el [ejemplo de autenticación entre orígenes en GitHub](https://github.com/auth0/lock/blob/master/support/callback-cross-auth.html).

<div id="error-codes-and-descriptions">
  ## Códigos y descripciones de error
</div>

<Warning>
  Las descripciones de error están pensadas para que sean legibles para las personas. Pueden cambiar en cualquier momento y no deben ser procesadas por ningún código.
</Warning>

Cuando se usa Auth0.js (o Lock) para el inicio de sesión integrado, llama al endpoint `/co/authenticate`, que puede devolver los siguientes errores:

| Estado | Código                        | Descripción                                                                                                                                                                                          |
| ------ | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | `invalid_request`             | Cuerpo de la solicitud no válido. Se requieren todos y únicamente client\_id, credential\_type, username, otp y realm.                                                                               |
| `400`  | `unsupported_credential_type` | Parámetro de tipo de credencial desconocido.                                                                                                                                                         |
| `400`  | `invalid_request`             | Realm desconocido: non-existent-connection.                                                                                                                                                          |
| `401`  | `unauthorized_client`         | No se permite el inicio de sesión entre orígenes.                                                                                                                                                    |
| `401`  | `password_leaked`             | Este intento de inicio de sesión se ha bloqueado porque la contraseña que estás usando se expuso anteriormente en una filtración de datos (no en esta aplicación).                                   |
| `403`  | `access_denied`               | Correo electrónico o contraseña incorrectos.                                                                                                                                                         |
| `403`  | `access_denied`               | Error de autenticación                                                                                                                                                                               |
| `403`  | `blocked_user`                | Usuario bloqueado                                                                                                                                                                                    |
| `429`  | `too_many_attempts`           | Tu cuenta se ha bloqueado tras varios intentos consecutivos de inicio de sesión. Te hemos enviado una notificación a través de tu método de contacto preferido con instrucciones para desbloquearla. |
| `429`  | `too_many_attempts`           | Hemos detectado un comportamiento de inicio de sesión sospechoso y se bloquearán más intentos. Ponte en contacto con el administrador.                                                               |

Además, también puedes recibir un error `403` genérico sin una propiedad `error` o `error_description`. El cuerpo de la respuesta solo incluiría algo similar a lo siguiente:

`Origin https://test.app is not allowed.`

<div id="browser-testing-support">
  ## Compatibilidad para pruebas en navegadores
</div>

Los siguientes navegadores pueden usar autenticación entre orígenes cuando las cookies de terceros están deshabilitadas:

* Microsoft Internet Explorer

<Card title="Atributos de la cookie SameSite">
  Anteriormente, las opciones del [atributo de cookie `samesite`](/es/docs/manage-users/cookies/samesite-cookie-attribute-changes) eran `true`, `false`, `strict` o `lax`. Si no configuraba el atributo manualmente, Auth0 usaba el valor predeterminado `false`.

  A partir de febrero de 2020, Google Chrome v80 cambió la forma en que maneja las cookies, y Auth0 implementó los siguientes cambios en consecuencia:

  * Las cookies sin el atributo `samesite` configurado se establecerán en `lax`.
  * Las cookies con `sameSite=none` deben ser seguras; de lo contrario, no se pueden guardar en el almacén de cookies del navegador.

  El objetivo de estos cambios es mejorar la seguridad y ayudar a mitigar los ataques de falsificación de solicitudes entre sitios (CSRF).
</Card>

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

* [Inicio de sesión integrado](/es/docs/authenticate/login/embedded-login)
* [Autenticación entre orígenes](/es/docs/authenticate/login/cross-origin-authentication)
* [Configuración de la aplicación](/es/docs/get-started/applications/application-settings)
* [Cambios en el atributo de cookie SameSite](/es/docs/manage-users/cookies/samesite-cookie-attribute-changes)
