> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev-docs-event-stream-action-templates.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Flux implicite avec OIDC

> Découvrez comment le pipeline conforme à l’OIDC affecte le flux implicite.

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) + "*****MASKED*****";
          }
          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>;
};

Traditionnellement, le [Flux implicite](/docs/fr-ca/get-started/authentication-and-authorization-flow/implicit-flow-with-form-post) était utilisé par les applications qui étaient incapables de stocker des secrets en toute sécurité. L’utilisation de ce flux n’est plus considérée comme meilleure pratique pour la demande de jetons d’accès; les nouvelles implémentations devraient utiliser le [Flux de code d’autorisation avec PKCE](/docs/fr-ca/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce). Toutefois, lorsqu’il est utilisé avec le mode de réponse Form Post, le Flux implicite offre un flux de travail simplifié si l’application n’a besoin que d’un jeton d’ID pour effectuer l’authentification des utilisateurs; dans ces cas, il serait utilisé dans le cadre du [Flux hybride](/docs/fr-ca/get-started/authentication-and-authorization-flow/hybrid-flow).

Les jetons d’actualisation ne seront plus renvoyés lors de l’utilisation du flux implicite pour l’authentification.

En outre, le pipeline Conforme à l’OIDC affecte le flux implicite dans les domaines suivants : demande d’authentification, réponse d’authentification, structure de jeton d’ID et structure de jeton d’accès.

## Demande d’authentification

### Héritage

```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
```

Le paramètre `device` n’est nécessaire que si vous demandez un jeton d’actualisation en passant par la permission `offline_access`. Pour en savoir plus, veuillez consulter [Jetons d’actualisation](/docs/fr-ca/secure/tokens/refresh-tokens).

### Conforme à OIDC

```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` indique que nous voulons recevoir à la fois un jeton d’accès et un jeton d’ID.
* Les jetons d’actualisation ne sont pas autorisés dans l’autorisation implicite. Utilisez `prompt=none` à la place. Pour en savoir plus, consultez [Configurer Authentification Silencieuse](/docs/fr-ca/authenticate/login/configure-silent-authentication).
* `favorite_color` n’est plus une permission valide.
* `audience` est facultative.
* `nonce` doit être une chaîne aléatoire cryptographiquement sécurisée. Pour en savoir plus, consultez [Atténuer les attaques par réinsertion lors de l'utilisation du flux implicite](/docs/fr-ca/get-started/authentication-and-authorization-flow/implicit-flow-with-form-post/mitigate-replay-attacks-when-using-the-implicit-flow).

## Réponse d’authentification

### Héritage

```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
```

* Le jeton d’accès retourné est valide pour appeler le point de terminaison [`/userinfo`](/docs/fr-ca/api/authentication#get-user-info).
* Un jeton d’actualisation sera retourné uniquement si un paramètre `device` a été passé et que la permission `offline_access` a été demandée.

### Conforme à OIDC

```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
```

* Le jeton d’accès retourné est valide pour appeler le point de terminaison [`/userinfo`](/docs/fr-ca/api/authentication#get-user-info) (à condition que l’API spécifiée par le paramètre `audience` utilise `RS256` comme [algorithme de signature](/docs/fr-ca/get-started/applications/signing-algorithms)) et éventuellement le serveur de ressources spécifié par le paramètre `audience`.
* Si vous utilisez `response_type=id_token`, Auth0 ne retournera qu’un jeton d’ID.
  Les jetons d’actualisation ne sont pas autorisés dans l’autorisation implicite. Utilisez `prompt=none` à la place.

## Structure des jetons d’ID

### Héritage

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" />

### Conforme à OIDC

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" />

* La demande `favorite_color` doit être associée à un espace de noms et ajoutée au moyen d’une règle. Pour en savoir plus, consultez [Créer des demandes personnalisées à espace de noms](/docs/fr-ca/secure/tokens/json-web-tokens/create-custom-claims).
* Après avoir validé le jeton d’ID, l’application doit valider le nombre aléatoire pour atténuer les attaques par réinsertion.

## Structure du jeton d’accès (facultatif)

### Héritage

```json lines theme={null}
SlAV32hkKG
```

Le jeton d'accès renvoyé est opaque et n'est valide que pour appeler le point de terminaison `/userinfo`.

### Conforme à OIDC

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" />

* Le jeton d’accès retourné est un <Tooltip href="/docs/fr-ca/glossary?term=json-web-token" tip="Jeton Web JSON (JWT)
  Format standard de jeton d’ID (et souvent de jeton d’accès) utilisé pour représenter en toute sécurité des demandes entre deux parties." cta="Voir le glossaire">JWT</Tooltip> valide pour appeler le point de terminaison`/userinfo` (à condition que l’API indiquée par le paramètre `audience` utilise `RS256` comme [algorithme de signature](/docs/fr-ca/get-started/applications/change-application-signing-algorithms)) ainsi que le serveur de ressources indiqué par le paramètre `audience`.
* Un jeton d’accès opaque peut toujours être retourné `/userinfo` est la seule <Tooltip data-tooltip-id="react-containers-DefinitionTooltip-1" tip="">audience</Tooltip> spécifiée.

## En savoir plus

* [Jetons d’ accès avec OpenID Connect (OIDC)](/docs/fr-ca/authenticate/login/oidc-conformant-authentication/oidc-adoption-access-tokens)
* [API externes avec OIDC](/docs/fr-ca/authenticate/login/oidc-conformant-authentication/oidc-adoption-apis)
* [Flux de code d’autorisation avec OIDC](/docs/fr-ca/authenticate/login/oidc-conformant-authentication/oidc-adoption-auth-code-flow)
* [Flux des identifiants client avec OIDC](/docs/fr-ca/authenticate/login/oidc-conformant-authentication/oidc-adoption-client-credentials-flow)
* [Délégation avec OIDC](/docs/fr-ca/authenticate/login/oidc-conformant-authentication/oidc-adoption-delegation)
* [Jetons d’actualisation avec OIDC](/docs/fr-ca/authenticate/login/oidc-conformant-authentication/oidc-adoption-refresh-tokens)
