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

> Apprenez à générer et à valider en toute sécurité un nonce cryptographique à utiliser avec l’flux implicite avec Form Post.

# Atténuer les attaques par rejeu lors de l’utilisation de l’Implicit Flow

Pour atténuer les attaques par rejeu lors de l’utilisation de l’[flux implicite avec Form Post](/docs/fr-ca/get-started/authentication-and-authorization-flow/implicit-flow-with-form-post), un <Tooltip tip="Nonce : Nombre arbitraire émis une seule fois dans un protocole d’authentification afin de détecter et de prévenir les attaques par rejeu." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=nonce">nonce</Tooltip> doit être envoyé dans les requêtes d’authentification [comme l’exige la spécification OpenID Connect (OIDC)](https://openid.net/specs/openid-connect-core-1_0.html#ImplicitAuthRequest).

Le nonce est généré par l’application, envoyé à titre de paramètre `nonce` de la chaîne de requête dans la requête d’authentification, puis inclus dans la réponse <Tooltip tip="ID Token : Justificatif destiné au client lui-même, plutôt qu’à l’accès à une ressource." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=ID+Token">ID Token</Tooltip> d’Auth0. Cela permet aux applications de corréler la réponse ID Token d’Auth0 avec la requête d’authentification initiale.

Pour en savoir plus sur l’endroit où inclure le nonce, consultez [ajouter la connexion à l’aide du flux implicite avec Form Post](/docs/fr-ca/get-started/authentication-and-authorization-flow/implicit-flow-with-form-post/add-login-using-the-implicit-flow-with-form-post).

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  [Auth0.js](/docs/fr-ca/libraries/auth0js) gère les paramètres `state` et `nonce` pour vous lorsque vous utilisez l’[authentification inter-origines](/docs/fr-ca/authenticate/login/cross-origin-authentication).
</Callout>

<div id="generate-a-cryptographically-random-nonce">
  ## Générer un nonce cryptographiquement aléatoire
</div>

Une façon de générer un nonce cryptographiquement aléatoire consiste à utiliser un outil comme [Nano ID](https://github.com/ai/nanoid) ou un équivalent. Cela dit, vous devez alors inclure cet outil dans votre code JavaScript. Si ce n’est pas possible, vous pouvez profiter du fait que les [navigateurs modernes](http://caniuse.com/#feat=cryptography) peuvent utiliser la [Web Crypto API](https://www.w3.org/TR/WebCryptoAPI/) pour générer des chaînes aléatoires cryptographiquement sûres à utiliser comme nonces.

```javascript lines theme={null}
function randomString(length) {
    var charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz+/'
    result = ''

    while (length > 0) {
        var bytes = new Uint8Array(16);
        var random = window.crypto.getRandomValues(bytes);

        random.forEach(function(c) {
            if (length == 0) {
                return;
            }
            if (c < charset.length) {
                result += charset[c];
                length--;
            }
        });
    }
    return result;
}
```

<div id="persist-nonces-across-requests">
  ## Enregistrer les nonces d’une requête à l’autre
</div>

Le nonce généré doit être enregistré dans votre application Web à l’aide de l’une des méthodes suivantes :

* `HttpOnly` <Tooltip tip="Cookie de session : entité qui, lorsqu’elle est présente, permet de considérer l’utilisateur comme authentifié." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=session+cookie">cookie de session</Tooltip>
* valeur dans le stockage local HTML5

Par exemple :

```js lines theme={null}
window.localStorage.setItem('nonce', randomString(16));
```

<div id="validate-id-token">
  ## Valider l’ID token
</div>

Une fois qu’Auth0 renvoie un [ID Token](/docs/fr-ca/secure/tokens/id-tokens), ce token doit être [validé et décodé](/docs/fr-ca/secure/tokens/id-tokens/validate-id-tokens) comme d’habitude.
Le claim `nonce` doit contenir exactement la même valeur que celle envoyée dans la requête.
Sinon, l’application doit rejeter l’authentification.

```javascript lines theme={null}
var jwt = '...'; // corps de l'ID Token validé et décodé
if (jwt.nonce === window.localStorage.getItem('nonce')) {
    // Nonce valide
} else {
    // Nonce invalide ! Une attaque par rejeu de jeton est peut-être en cours
}
```

<div id="learn-more">
  ## Pour en savoir plus
</div>

* [Flux implicite avec Form Post](/docs/fr-ca/get-started/authentication-and-authorization-flow/implicit-flow-with-form-post)
* [Ajouter la connexion à l’aide du flux implicite avec Form Post](/docs/fr-ca/get-started/authentication-and-authorization-flow/implicit-flow-with-form-post/add-login-using-the-implicit-flow-with-form-post)
* [Flux implicite avec OIDC](/docs/fr-ca/authenticate/login/oidc-conformant-authentication/oidc-adoption-implicit-flow)
