Skip to content

Validação do ID Token

O cliente deve validar o ID Token antes de utilizá-lo. Esta validação garante a autenticidade e integridade do token.

Validações Obrigatórias

1. Validação da Audiência (aud)

O cliente deve validar que a Claim aud contém seu próprio client_id.

javascript
const claims = decodificarJWT(idToken);
if (claims.aud !== seuClientId) {
  throw new Error('Token não foi emitido para este cliente');
}

2. Validação do Emissor (iss)

Deve garantir que o iss seja fanbase.

javascript
if (claims.iss !== 'fanbase') {
  throw new Error('Token não foi emitido pelo sistema');
}

3. Validação da Expiração (exp)

O JWT precisa passar por verificação de validade. O token não deve ser aceito após a data de expiração.

javascript
const agora = Math.floor(Date.now() / 1000);
if (claims.exp < agora) {
  throw new Error('Token expirado');
}

4. Validação da Assinatura

A assinatura deve ser checada utilizando o client_secret. Esta é a validação mais importante, pois garante que o token não foi alterado.

javascript
const jwt = require('jsonwebtoken');

try {
  const decoded = jwt.verify(idToken, clientSecret, {
    issuer: 'fanbase',
    audience: clientId
  });
  console.log('Token válido:', decoded);
} catch (error) {
  console.error('Token inválido:', error.message);
}

5. Validação do Nonce (se aplicável)

Se você incluiu o parâmetro nonce na solicitação de autenticação, deve verificar se o valor da Claim nonce no ID Token é igual ao valor enviado.

javascript
if (nonceEnviado && claims.nonce !== nonceEnviado) {
  throw new Error('Nonce não corresponde');
}

Exemplo Completo de Validação

javascript
const jwt = require('jsonwebtoken');

function validarIdToken(idToken, clientId, clientSecret, nonceEsperado) {
  try {
    const decoded = jwt.verify(idToken, clientSecret, {
      issuer: 'fanbase',
      audience: clientId,
      algorithms: ['HS256']
    });

    if (nonceEsperado && decoded.nonce !== nonceEsperado) {
      throw new Error('Nonce não corresponde');
    }

    return decoded;
  } catch (error) {
    if (error.name === 'TokenExpiredError') {
      throw new Error('Token expirado');
    } else if (error.name === 'JsonWebTokenError') {
      throw new Error('Token inválido');
    } else {
      throw error;
    }
  }
}

Bibliotecas Recomendadas

  • Node.js: jsonwebtoken ou jose
  • Python: PyJWT
  • PHP: firebase/php-jwt
  • Java: java-jwt ou jjwt

Próximos Passos

Após validar o ID Token, você pode:

Documentação da API Fanbase