Skip to content

Parámetros Adicionales

El sistema soporta nonce (para mitigar ataques de Replay) y state (para mantener el estado y mitigar CSRF).

nonce

Cadena sensible a mayúsculas usada para asociar una sesión del cliente a un id_token y para mitigar ataques del tipo Replay. El valor es transmitido inalterado de la solicitud de autenticación al id_token. Si está presente en el id_token, el cliente debe verificar si el valor de la Claim nonce es igual al valor del parámetro nonce enviado en la solicitud.

Ejemplo

Nonce en la solicitud:

&nonce=n-0S6_WzA2Mj

En el ID Token:

json
{
  "nonce": "n-0S6_WzA2Mj",
  ...
}

Validación

javascript
const nonceGenerado = generarNonce();
sessionStorage.setItem('oauth_nonce', nonceGenerado);

const authUrl = `...&nonce=${nonceGenerado}`;

// En el callback, después de recibir el ID Token:
const claims = decodificarJWT(idToken);
const nonceAlmacenado = sessionStorage.getItem('oauth_nonce');

if (claims.nonce !== nonceAlmacenado) {
  throw new Error('Nonce no corresponde - posible ataque Replay');
}

state

Valor opaco usado para mantener el estado entre la solicitud y el Callback. Comúnmente la mitigación de Cross-site Request Forgery (CSRF, XSRF) se hace a partir de la vinculación entre el valor de este parámetro a una cookie del Navegador. Si está presente en la solicitud de autorización, el valor informado es transmitido inalterado al Callback.

Ejemplo

State en la solicitud:

&state=af0ifjsldkj

En el callback:

https://ejemplo.com.br/callback?code=50b9-ac5e-43-a9b6f8685&state=af0ifjsldkj

Validación

javascript
const stateGenerado = generarState();
sessionStorage.setItem('oauth_state', stateGenerado);

const authUrl = `...&state=${stateGenerado}`;

// En el callback:
const urlParams = new URLSearchParams(window.location.search);
const stateRetornado = urlParams.get('state');
const stateAlmacenado = sessionStorage.getItem('oauth_state');

if (stateRetornado !== stateAlmacenado) {
  throw new Error('State no corresponde - posible ataque CSRF');
}

Funciones Auxiliares

javascript
function generarNonce() {
  return btoa(Math.random().toString()).substring(0, 16);
}

function generarState() {
  return btoa(Math.random().toString()).substring(0, 16);
}

Buenas Prácticas

  • Siempre use state para prevenir ataques CSRF
  • Use nonce cuando necesite garantizar que el ID Token corresponde a la solicitud específica
  • Almacene los valores de forma segura (sessionStorage, cookies httpOnly, etc.)
  • Valide siempre los valores retornados antes de procesar la autenticación
  • Genere valores aleatorios y únicos para cada solicitud

Documentación de la API Fanbase