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:
jsonwebtokenoujose - Python:
PyJWT - PHP:
firebase/php-jwt - Java:
java-jwtoujjwt
Próximos Passos
Após validar o ID Token, você pode:
- Extrair informações do usuário das claims
- Utilizar o token para autenticar requisições
- Acessar os endpoints de informações do usuário
