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

> Aprende cómo la canalización compatible con OIDC afecta al flujo implícito.

# Flujo implícito con OIDC

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

Tradicionalmente, las aplicaciones que no podían almacenar secretos de forma segura usaban el [Flujo implícito](/es/docs/get-started/authentication-and-authorization-flow/implicit-flow-with-form-post). El uso de este flujo ya no se considera una práctica recomendada para solicitar <Tooltip tip="Token de acceso: Credencial de autorización, en forma de cadena opaca o JWT, utilizada para acceder a una API." cta="Ver glosario" href="/es/docs/glossary?term=access+tokens">tokens de acceso</Tooltip>; las implementaciones nuevas deben usar el [Flujo de código de autorización con PKCE](/es/docs/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce). Sin embargo, cuando se usa con el modo de respuesta Form Post, el Flujo implícito sí ofrece un flujo de trabajo más ágil si la aplicación solo necesita un <Tooltip tip="Token de acceso: Credencial de autorización, en forma de cadena opaca o JWT, utilizada para acceder a una API." cta="Ver glosario" href="/es/docs/glossary?term=ID+token">token de ID</Tooltip> para autenticar al usuario; en estos casos, se usaría como parte del [Flujo híbrido](/es/docs/get-started/authentication-and-authorization-flow/hybrid-flow).

<Tooltip tip="Token de actualización: Token utilizado para obtener un nuevo Token de acceso sin obligar a los usuarios a iniciar sesión de nuevo." cta="Ver glosario" href="/es/docs/glossary?term=Refresh+tokens">Los tokens de actualización</Tooltip> ya no se devolverán al usar el Flujo implícito para la autenticación.

Además, el proceso compatible con OIDC afecta al Flujo implícito en las siguientes áreas: solicitud de autenticación, respuesta de autenticación, estructura del token de ID y estructura del token de acceso.

<div id="authentication-request">
  ## Solicitud de autenticación
</div>

<div id="legacy">
  ### Legado
</div>

```http lines theme={null}
GET /authorize?
    response_type=token
    &scope=openid email favorite_color offline_access
    &client_id=123
    &state=af0ifjsldkj
    &redirect_uri=https://app.example.com
    &device=my-device-name
```

El parámetro `device` solo es necesario si solicita un Token de actualización al incluir el scope `offline_access`. Para obtener más información, consulte [token de actualización](/es/docs/secure/tokens/refresh-tokens).

<div id="oidc-conformant">
  ### Conforme a OIDC
</div>

```http lines theme={null}
GET /authorize?
    response_type=token id_token
    &scope=openid email
    &client_id=123
    &state=af0ifjsldkj
    &nonce=jxdlsjfi0fa
    &redirect_uri=https://app.example.com
    &audience=https://api.example.com
```

* `response_type` indica que queremos recibir tanto un token de acceso como un token de ID.
* Los tokens de actualización no se permiten en el grant implícito. Use `prompt=none` en su lugar. Para obtener más información, lea [Configurar la autenticación silenciosa](/es/docs/authenticate/login/configure-silent-authentication).
* `favorite_color` ya no es un scope válido.
* `audience` es opcional.
* `nonce` debe ser una cadena aleatoria criptográficamente segura. Para obtener más información, lea [Mitigar los ataques de repetición al usar el flujo implícito](/es/docs/get-started/authentication-and-authorization-flow/implicit-flow-with-form-post/mitigate-replay-attacks-when-using-the-implicit-flow).

<div id="authentication-response">
  ## Respuesta de autenticación
</div>

<div id="legacy">
  ### Legado
</div>

```json lines theme={null}
HTTP/1.1 302 Found
Location: https://app.example.com/#
    access_token=SlAV32hkKG
    &expires_in=86400
    &state=af0ifjsldk
    &id_token=eyJ...
    &refresh_token=8xLOxBtZp8
    &token_type=Bearer
```

* El token de acceso devuelto es válido para llamar al endpoint [`/userinfo`](https://auth0.com/docs/api/authentication#get-user-info).
* Solo se devolverá un token de actualización si se pasó el parámetro `device` y se solicitó el scope `offline_access`.

<div id="oidc-conformant">
  ### Conforme a OIDC
</div>

```json lines theme={null}
HTTP/1.1 302 Found
Location: https://app.example.com/#
    access_token=eyJ...
    &expires_in=86400
    &state=af0ifjsldk
    &id_token=eyJ...
    &token_type=Bearer
```

* El token de acceso devuelto es válido para llamar al endpoint [`/userinfo`](https://auth0.com/docs/api/authentication#get-user-info) (siempre y cuando la API especificada por el parámetro `audience` use `RS256` como [algoritmo de firma](/es/docs/get-started/applications/signing-algorithms)) y, opcionalmente, al <Tooltip tip="Servidor de recursos: servidor que aloja recursos protegidos. Los servidores de recursos aceptan y responden a solicitudes de recursos protegidos." cta="Ver glosario" href="/es/docs/glossary?term=resource+server">servidor de recursos</Tooltip> especificado por el parámetro `audience`.
* Si usa `response_type=id_token`, Auth0 solo devolverá un token de ID.
  Los tokens de actualización no están permitidos en el grant implícito. Use `prompt=none` en su lugar.

<div id="id-token-structure">
  ## Estructura del token de ID
</div>

### legado

export const codeExample1 = `{
    "sub": "auth0|alice",
    "iss": "https://{yourDomain}/",
    "aud": "123",
    "exp": 1482809609,
    "iat": 1482773609,
    "email": "alice@example.com",
    "email_verified": true,
    "favorite_color": "blue"
}`;

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

<div id="oidc-conformant">
  ### Conforme a OIDC
</div>

export const codeExample2 = `{
    "sub": "auth0|alice",
    "iss": "https://{yourDomain}/",
    "aud": "123",
    "exp": 1482809609,
    "iat": 1482773609,
    "email": "alice@example.com",
    "email_verified": true,
    "https://app.example.com/favorite_color": "blue",
    "nonce": "jxdlsjfi0fa"
}`;

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

* La claim `favorite_color` debe tener un espacio de nombres y agregarse mediante una Rule. Para obtener más información, consulta [Crear claims personalizadas con espacio de nombres](/es/docs/secure/tokens/json-web-tokens/create-custom-claims).
* Después de validar el token de ID, la aplicación debe validar el <Tooltip tip="Nonce: Número arbitrario emitido una sola vez en un protocolo de autenticación para detectar y prevenir ataques de repetición." cta="Ver glosario" href="/es/docs/glossary?term=nonce">nonce</Tooltip> para mitigar ataques de repetición.

<div id="access-token-structure-optional">
  ## Estructura del token de acceso (opcional)
</div>

### legado

```bash HTTP lines theme={null}
SlAV32hkKG
```

El Token de acceso devuelto es opaco y solo es válido para llamar al endpoint `/userinfo`.

<div id="oidc-conformant">
  ### Conforme a OIDC
</div>

export const codeExample3 = `{
    "sub": "auth0|alice",
    "iss": "https://{yourDomain}/",
    "aud": [
        "https://api.example.com",
        "https://{yourDomain}/userinfo"
    ],
    "azp": "123",
    "exp": 1482816809,
    "iat": 1482809609,
    "scope": "openid email"
}`;

<AuthCodeBlock children={codeExample3} language="json" filename="JSON" />

* El token de acceso devuelto es un <Tooltip tip="JSON Web Token (JWT): formato estándar de ID Token (y, a menudo, también de token de acceso) que se utiliza para representar claims de forma segura entre dos partes." cta="Ver glosario" href="/es/docs/glossary?term=JWT">JWT</Tooltip> válido para llamar al endpoint `/userinfo` (siempre que la API especificada por el parámetro `audience` use `RS256` como [algoritmo de firma](/es/docs/get-started/applications/change-application-signing-algorithms)), así como al servidor de recursos especificado por el parámetro `audience`.
* Aún podría devolverse un token de acceso opaco si `/userinfo` es la única <Tooltip tip="Audiencia: identificador único de la audiencia de un token emitido. Se denomina 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> especificada.

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

* [Tokens de acceso con OIDC](/es/docs/authenticate/login/oidc-conformant-authentication/oidc-adoption-access-tokens)
* [APIs externas con OIDC](/es/docs/authenticate/login/oidc-conformant-authentication/oidc-adoption-apis)
* [Flujo de código de autorización con OIDC](/es/docs/authenticate/login/oidc-conformant-authentication/oidc-adoption-auth-code-flow)
* [Flujo de credenciales de cliente con OIDC](/es/docs/authenticate/login/oidc-conformant-authentication/oidc-adoption-client-credentials-flow)
* [Delegación con OIDC](/es/docs/authenticate/login/oidc-conformant-authentication/oidc-adoption-delegation)
* [Tokens de actualización con OIDC](/es/docs/authenticate/login/oidc-conformant-authentication/oidc-adoption-refresh-tokens)
