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

Pour réduire les attaques par réinsertion en utilisant le Flux Implicite avec Form Post, un nombre aléatoire doit être envoyé lors des demandes d’authentification, comme exigé par OpenID Connect (OIDC).

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.

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

Une des façons de créer un nonce aléatoire de manière cryptographique consiste à utiliser un outil comme Nano ID 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 peuvent utiliser Web Crypto API pour créer des chaînes aléatoires sécurisées utilisables comme nombres aléatoires.

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

Was this helpful?

/

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 :

window.localStorage.setItem('nonce', randomString(16));

Was this helpful?

/

Valider un jeton d’ID

Lorsque Auth0 répond avec un jeton d’ID, ce jeton doit être validé et décodé 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.

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
}

Was this helpful?

/

En savoir plus