Skip to content

Parâmetros Adicionais

O sistema suporta nonce (para mitigar ataques de Replay) e state (para manter o estado e mitigar CSRF).

nonce

String sensível a maiúsculas usada para associar uma sessão do cliente a um id_token e para mitigar ataques do tipo Replay. O valor é transmitido inalterado da solicitação de autenticação para o id_token. Se estiver presente no id_token, o cliente deve verificar se o valor da Claim nonce é igual ao valor do parâmetro nonce enviado na solicitação.

Exemplo

Nonce na requisição:

&nonce=n-0S6_WzA2Mj

No ID Token:

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

Validação

javascript
const nonceGerado = gerarNonce();
sessionStorage.setItem('oauth_nonce', nonceGerado);

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

// No callback, após receber o ID Token:
const claims = decodificarJWT(idToken);
const nonceArmazenado = sessionStorage.getItem('oauth_nonce');

if (claims.nonce !== nonceArmazenado) {
  throw new Error('Nonce não corresponde - possível ataque Replay');
}

state

Valor opaco usado para manter o estado entre a requisição e a Callback. Comumente a mitigação de Cross-site Request Forgery (CSRF, XSRF) é feita a partir da vinculação entre o valor desse parâmetro a um cookie de Browser. Caso esteja presente na requisição de autorização, o valor informado é transmitido inalterado para a Callback.

Exemplo

State na requisição:

&state=af0ifjsldkj

Na callback:

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

Validação

javascript
const stateGerado = gerarState();
sessionStorage.setItem('oauth_state', stateGerado);

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

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

if (stateRetornado !== stateArmazenado) {
  throw new Error('State não corresponde - possível ataque CSRF');
}

Funções Auxiliares

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

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

Boas Práticas

  • Sempre use state para prevenir ataques CSRF
  • Use nonce quando precisar garantir que o ID Token corresponde à solicitação específica
  • Armazene os valores de forma segura (sessionStorage, cookies httpOnly, etc.)
  • Valide sempre os valores retornados antes de processar a autenticação
  • Gere valores aleatórios e únicos para cada solicitação

Documentação da API Fanbase