Passer au contenu principal
Pour atténuer les attaques par rejeu lors de l’utilisation du flux implicite avec Form Post, un doit être envoyé dans les requêtes d’authentification comme l’exige la spécification OpenID Connect (OIDC). 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 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.
Auth0.js gère les paramètres state et nonce pour vous lorsque vous utilisez l’authentification inter-origine.

Générer un nonce aléatoire de manière cryptographiquement sécurisée

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 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 peuvent utiliser la Web Crypto API pour générer des chaînes aléatoires cryptographiquement sécurisées à utiliser comme nonces.
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;
}

Conserver les nonces d’une requête à l’autre

Le nonce généré doit être stocké dans votre application web à l’aide de l’une des méthodes suivantes :
  • HttpOnly
  • Valeur stockée dans le stockage local HTML5
Par exemple :
window.localStorage.setItem('nonce', randomString(16));

Valider le jeton d’identité

Une fois qu’Auth0 a renvoyé un jeton d’identité, ce jeton doit être validé et décodé 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.
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
}

En savoir plus