Saltar al contenido principal
Para mitigar los ataques de repetición al usar el flujo implícito con Form Post, se debe enviar un en las solicitudes de autenticación, tal como exige la especificación OpenID Connect (OIDC). La aplicación genera el nonce, lo envía como parámetro nonce en la cadena de consulta de la solicitud de autenticación, y Auth0 lo incluye en la respuesta del . Esto permite que las aplicaciones asocien la respuesta del ID Token de Auth0 con la solicitud de autenticación inicial. Para obtener más información sobre dónde incluir el nonce, consulte Agregar Login con el flujo implícito con Form Post.
Auth0.js gestiona los parámetros state y nonce por usted cuando utiliza autenticación entre orígenes.

Genera un nonce criptográficamente aleatorio

Una forma de generar un nonce criptográficamente aleatorio es usar una herramienta como Nano ID o similar. Sin embargo, esto requiere empaquetar la herramienta con tu código JavaScript. Si eso no es posible, puedes aprovechar que los navegadores modernos pueden usar la Web Crypto API para generar cadenas aleatorias criptográficamente seguras que pueden usarse como 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;
}

Mantenga los nonce entre solicitudes

El nonce generado debe conservarse en su aplicación web mediante cualquiera de los siguientes métodos:
  • HttpOnly
  • valor de almacenamiento local de HTML5
Por ejemplo:
window.localStorage.setItem('nonce', randomString(16));

Validar el token de ID

Una vez que Auth0 responde con un ID Token, este token debe validarse y decodificarse como de costumbre. Su claim nonce debe contener exactamente el mismo valor que se envió en la solicitud. De lo contrario, la aplicación debe rechazar la authentication.
var jwt = '...'; // cuerpo del ID Token validado y decodificado
if (jwt.nonce === window.localStorage.getItem('nonce')) {
    // Nonce correcto
} else {
    // ¡Nonce incorrecto! Podría estar en curso un ataque de repetición de token
}

Más información