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

> Découvrez comment générer et valider de manière sécurisée un nonce cryptographique à utiliser avec le flux implicite avec Form Post.

# Atténuer les attaques par rejeu lors de l’utilisation du flux implicite

Pour atténuer les attaques par rejeu lors de l’utilisation du [flux implicite avec Form Post](/fr-CA/docs/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="/fr-CA/docs/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é comme paramètre `nonce` dans la chaîne de requête de la requête d’authentification, puis inclus dans la réponse <Tooltip tip="ID Token : justificatif destiné à l’application cliente elle-même, plutôt qu’à l’accès à une ressource." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=ID+Token">jeton d’identité</Tooltip> d’Auth0. Cela permet aux applications d’associer le jeton d’identité renvoyé par Auth0 à la requête d’authentification initiale.

Pour en savoir plus sur l’endroit où inclure le nonce, consultez [Ajouter la connexion au moyen du flux implicite avec Form Post](/fr-CA/docs/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](/fr-CA/docs/libraries/auth0js) gère les paramètres `state` et `nonce` pour vous lorsque vous utilisez l’[authentification inter-origine](/fr-CA/docs/authenticate/login/cross-origin-authentication).
</Callout>

<div id="generate-a-cryptographically-random-nonce">
  ## Générer un nonce aléatoire de manière cryptographiquement sécurisée
</div>

Une façon de générer un nonce aléatoire de manière cryptographiquement sécurisée consiste à utiliser un outil comme [Nano ID](https://github.com/ai/nanoid) ou un outil semblable. Cela vous oblige toutefois à inclure cet outil dans votre code JavaScript. Si ce n’est pas possible, vous pouvez tirer parti 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écurisées à 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">
  ## Conserver les nonces d’une requête à l’autre
</div>

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

* `HttpOnly` <Tooltip tip="Cookie de session : élément qui, lorsqu’il est présent, permet de considérer l’utilisateur comme authentifié." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=session+cookie">cookie de session</Tooltip>
* Valeur stockée dans le stockage local HTML5

Par exemple :

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

<div id="validate-id-token">
  ## Valider le jeton d’identité
</div>

Une fois qu’Auth0 a renvoyé un [jeton d’identité](/fr-CA/docs/secure/tokens/id-tokens), ce jeton doit être [validé et décodé](/fr-CA/docs/secure/tokens/id-tokens/validate-id-tokens) de la manière habituelle.
Sa revendication `nonce` doit contenir exactement la même valeur que celle envoyée dans la requête.
Dans le cas contraire, l’application doit refuser l’authentification.

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

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

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