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

> Configuración, consideraciones de seguridad y prácticas recomendadas para usar nombres de organización en la Authentication API.

# Usar nombres de organización en la Authentication API

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

De forma predeterminada, la [Authentication API](https://auth0.com/docs/api/authentication) usa IDs de organización para identificar organizaciones específicas. Si es necesario, puedes configurar tu inquilino para que también use los nombres de las organizaciones como identificador. Sin embargo, hay implicaciones de usabilidad y seguridad que debes tener en cuenta antes de habilitar esta función. Para comprender mejor el posible impacto, revisa la sección [Consideraciones y recomendaciones](#considerations-and-recommendations).

<div id="how-it-works">
  ## Cómo funciona
</div>

Configurar tu inquilino para admitir nombres de organización en la Authentication API genera lo siguiente:

* El parámetro `organization` en los endpoints [/authorize](https://auth0.com/docs/api/authentication#authorize-application) y [SAML](https://auth0.com/docs/api/authentication#saml) puede aceptar tanto nombres de organización como ID.
* Los tokens de acceso y los <Tooltip tip="ID Token: Credencial destinada al propio cliente, en lugar de acceder a un recurso." cta="Ver glosario" href="/es/docs/glossary?term=ID+tokens">ID Token</Tooltip> incluyen automáticamente `org_name` y `org_id` como claims.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  - Las [organizaciones](/es/docs/manage-users/organizations/configure-organizations/create-organizations) se pueden configurar con dos nombres: un valor Name obligatorio que sirve como identificador lógico único y un Display Name opcional, más descriptivo para el usuario. El parámetro `org_name` solo acepta el valor Name obligatorio y no admite valores de Display Name.
  - Esta funcionalidad se administra a nivel de inquilino. No se puede habilitar individualmente para organizaciones específicas.
</Callout>

Puedes habilitar esta funcionalidad desde tu <Tooltip tip="Auth0 Dashboard: el producto principal de Auth0 para configurar tus servicios." cta="Ver glosario" href="/es/docs/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip> o mediante la <Tooltip tip="Auth0 Dashboard: el producto principal de Auth0 para configurar tus servicios." cta="Ver glosario" href="/es/docs/glossary?term=Management+API">Management API</Tooltip>:

* **Auth0 Dashboard**: Selecciona [Settings](/es/docs/get-started/tenant-settings) en el menú lateral izquierdo y elige la pestaña **Advanced**. En la sección **Settings**, habilita el interruptor **Allow Organization Names in Authentication API**.
* **Management API**: Usa el endpoint `PATCH /api/v2/tenants/settings` para establecer `allow_organization_name_in_authentication_api` en `true`. Para obtener más información, consulta la documentación de la [Management API](https://auth0.com/docs/api/management/v2).

<div id="example-flow">
  ### Flujo de ejemplo
</div>

El siguiente ejemplo muestra un flujo de código de autorización que utiliza nombres de organizaciones.

1. Llame al endpoint `/authorize` pasando el nombre de su organización en el parámetro `organization`:

export const codeExample1 = `https://{yourDomain}/authorize?
    response_type=code&
    client_id={yourClientId}&
    redirect_uri={https://yourApp/callback}&
    scope={scope}&
    state={state}&
    organization={yourOrganizationName}`;

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

2. Después de obtener el código de autorización, llama al endpoint `POST /oauth/token` para obtener un token de acceso y un ID Token:

export const codeExample2 = `curl --request POST \
  --url 'https://{yourDomain}/oauth/token' \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data grant_type=authorization_code \
  --data 'client_id={yourClientId}' \
  --data 'client_secret={yourClientSecret}' \
  --data 'code=yourAuthorizationCode}' \
  --data 'redirect_uri={https://yourApp/callback}'`;

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

3. Los tokens decodificados que se devuelven contienen las claims `org_id` y `org_name`:

```json lines theme={null}
{
    "sub": "google-oauth2|10...17",
    "aud": [
        "https://yourApp"
    ],
    "iat": 1686840988,
    "exp": 1686927388,
    "azp": "Suo...qTd",
    "scope": "openid profile",
    "org_id": "{yourOrganizationId}",
    "org_name": "{yourOrganizationName}"
}
```

<div id="considerations-and-recommendations">
  ## Consideraciones y recomendaciones
</div>

Antes de usar nombres de organizaciones en la Authentication API, es importante comprender las principales diferencias entre los nombres y los IDs de las organizaciones.

A diferencia de los IDs de las organizaciones (que permanecen estáticos), puedes cambiar el nombre de una organización en cualquier momento después de su creación inicial. Además, puedes reutilizar nombres de organizaciones dentro de un mismo inquilino, siempre que solo esté asignado a **exactamente una** organización a la vez. En la práctica, esto significa que puedes cambiar el nombre de una de tus organizaciones y reutilizar su nombre original para otra organización en tu inquilino. Los nombres de las organizaciones solo son únicos dentro de un mismo inquilino; el mismo nombre puede usarse para dos o más organizaciones en distintos inquilinos.

En general, se recomienda usar IDs de organizaciones al validar tokens. Sin embargo, si usar nombres de organizaciones es más adecuado para tu caso de uso, ten en cuenta las implicaciones que se indican a continuación al implementar esta funcionalidad.

<div id="usability-and-security-considerations">
  ### Consideraciones de usabilidad y seguridad
</div>

Tenga en cuenta los posibles efectos que se indican a continuación al usar nombres de organización para solicitar y validar tokens:

* **Los nombres de organización pueden reutilizarse**: Los tokens de larga duración no vencen cuando una organización cambia su nombre, y los claims `org_name` de esos tokens conservan su valor original. Si más adelante una organización distinta reutiliza el nombre original, esos tokens podrían otorgar a los usuarios acceso no autorizado a los datos y recursos administrados por la nueva organización.
* **Los nombres de organización solo son únicos dentro de un mismo inquilino**: Si su API no verifica los claims `iss` (emisor) en los tokens, una organización con el mismo nombre en un inquilino diferente podría generar tokens que su API aceptara incorrectamente.
* **Los nombres de organización pueden cambiar**: Si cambia el nombre de una organización, sus aplicaciones deben proporcionar el nuevo nombre de la organización en las solicitudes a la Authentication API. Como los tokens pueden ser de larga duración, es posible que el claim `org_name` de un token ya no coincida con el nombre actual de la organización, lo que podría impedir que las aplicaciones concedan acceso a la organización correcta.

<div id="recommended-best-practices">
  ### Prácticas recomendadas
</div>

Debido a los posibles efectos en la seguridad y la usabilidad, se recomienda usar identificadores en lugar de nombres para validar tokens al trabajar con organizaciones. Si decide usar nombres de organización, siga las prácticas recomendadas que se indican a continuación para obtener una experiencia óptima:

* Valide siempre el claim `iss` para asegurarse de que un token haya sido emitido por su inquilino de Auth0.
* Evite reutilizar nombres de organización que hayan existido anteriormente en su inquilino. Para evitar la reutilización y garantizar que los tokens emitidos previamente no puedan usarse para acceder a otras organizaciones, mantenga un registro preciso y actualizado de los nombres históricos de las organizaciones.
* Evite cambiar el nombre de las organizaciones una vez que estén en uso, salvo que sea absolutamente necesario. Si decide cambiar el nombre de una organización, tenga en cuenta que los tokens de acceso y los ID Token existentes no incluyen automáticamente el nuevo nombre de la organización. Después de cambiar el nombre de una organización, asegúrese de pedir a los usuarios que inicien sesión de nuevo.
