Mi comprensión actual es la siguiente:
El cliente (una aplicación web que se ejecuta en el navegador del usuario) genera un nonce, lo coloca en el almacenamiento de la sesión del navegador y lo redirige al servidor de autenticación, pasando el nonce como parámetro. Después de la autenticación, el servidor de autenticación redirige al cliente, pasando un token de identificación firmado que contiene el nonce, que el cliente debe validar con el nonce desde el almacenamiento de la sesión.
Si el nonce no está validado, un atacante podría sustituirlo por otro identificador de identificación, engañando al usuario para que visite su sitio y enviando un redireccionamiento con un identificador de identificación válido obtenido de una solicitud diferente.
Además del identificador de identificación, el servidor de autenticación también responde con un identificador de acceso. Si el nonce no está validado, un atacante podría sustituir un token de acceso diferente, engañando al usuario en su sitio y redirigiéndolo con ese token. Esto podría usarse para un ataque de denegación de servicio del lado del cliente (en particular si las pestañas del navegador comparten el almacenamiento de token, es decir, usan el almacenamiento local en lugar del almacenamiento de sesión).
En resumen, la validación de nonce es necesaria para confiar en el token de identificación. Si el token de identificación no necesita ser confiable, se puede omitir la validación de nonce.