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

# Atténuer les attaques par réinsertion lors de l'utilisation du flux implicite

> Comment créer et valider un nombre aléatoire cryptographique pour utilisation avec le flux Implicite avec Form Post.

Pour réduire les attaques par réinsertion en utilisant le [Flux Implicite avec Form Post](/docs/fr-ca/get-started/authentication-and-authorization-flow/implicit-flow-with-form-post), un nombre aléatoire doit être envoyé lors [des demandes d’authentification, comme exigé par OpenID Connect (OIDC)](https://openid.net/specs/openid-connect-core-1_0.html#ImplicitAuthRequest).

Le nombre aléatoire est créé par l’application, envoyé par un paramètre de chaîne de requête en tant que `nonce` dans la demande d’authentification, et inclus dans la réponse de jeton d’ID depuis Auth0. Cela permet aux applications de corréler la réponse de jeton d’ID depuis Auth0 avec la demande d’authentification initiale.

Pour en savoir plus sur l’emplacement du nombre aléatoire, voir [Ajouter une connexion en utilisant le 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 lors de l’utilisation de [l’authentification cross-origin](/docs/fr-ca/authenticate/login/cross-origin-authentication).
</Callout>

## Créer un nombre aléatoire de manière cryptographique

Une des façons de créer un <Tooltip href="/docs/fr-ca/glossary?term=nonce" tip="Nombre aléatoire
Nombre arbitraire émis une fois dans un protocole d’authentification pour détecter et prévenir les attaques par réinsertion." cta="Voir le glossaire">nonce</Tooltip> aléatoire de manière cryptographique consiste à utiliser un outil comme [Nano ID](https://github.com/ai/nanoid) ou équivalent. Cela vous oblige toutefois à associer l’outil avec votre code JavaScript. Si cela n’est pas possible, vous pouvez profiter du fait que les [navigateurs récents](http://caniuse.com/#feat=cryptography) peuvent utiliser [Web Crypto API](https://www.w3.org/TR/WebCryptoAPI/) pour créer des chaînes aléatoires sécurisées utilisables comme nombres aléatoires.

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

## Nombres aléatoires persistants sur plusieurs demandes

Le nombre aléatoire créé doit être persistant dans votre application Web en utilisant l’une des méthodes suivantes :

* Témoin de session `HttpOnly`
* Valeur de stockage local HTML5

Par exemple :

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

## Valider un jeton d’ID

Lorsque Auth0 répond avec un [jeton d’ID](/docs/fr-ca/secure/tokens/id-tokens), ce jeton doit être [validé et décodé](/docs/fr-ca/secure/tokens/id-tokens/validate-id-tokens) comme d’habitude.
Sa demande `nonce` doit contenir la même valeur exacte qui a été envoyée dans la demande.
Sinon, l’authentification sera rejetée par l’application.

```javascript lines theme={null}
var jwt = '...'; // validated and decoded ID Token body
if (jwt.nonce === window.localStorage.getItem('nonce')) {
    // Nonce is OK
} else {
    // Nonce is not OK! Token replay attack might be underway
}
```

## En savoir plus

* [Flux implicite avec Form Post](/docs/fr-ca/get-started/authentication-and-authorization-flow/implicit-flow-with-form-post)
* [Ajouter la connexion en utilisant le 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)
