Validación del ID Token
El cliente debe validar el ID Token antes de utilizarlo. Esta validación garantiza la autenticidad e integridad del token.
Validaciones Obligatorias
1. Validación de la Audiencia (aud)
El cliente debe validar que la Claim aud contiene su propio client_id.
javascript
const claims = decodificarJWT(idToken);
if (claims.aud !== suClientId) {
throw new Error('Token no fue emitido para este cliente');
}2. Validación del Emisor (iss)
Debe garantizar que el iss sea fanbase.
javascript
if (claims.iss !== 'fanbase') {
throw new Error('Token no fue emitido por el sistema');
}3. Validación de la Expiración (exp)
El JWT necesita pasar por verificación de validez. El token no debe ser aceptado después de la fecha de expiración.
javascript
const ahora = Math.floor(Date.now() / 1000);
if (claims.exp < ahora) {
throw new Error('Token expirado');
}4. Validación de la Firma
La firma debe ser verificada utilizando el client_secret. Esta es la validación más importante, pues garantiza que el token no ha sido 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. Validación del Nonce (si aplica)
Si incluyó el parámetro nonce en la solicitud de autenticación, debe verificar si el valor de la Claim nonce en el ID Token es igual al valor enviado.
javascript
if (nonceEnviado && claims.nonce !== nonceEnviado) {
throw new Error('Nonce no corresponde');
}Ejemplo Completo de Validación
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 no 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:
jsonwebtokenojose - Python:
PyJWT - PHP:
firebase/php-jwt - Java:
java-jwtojjwt
Próximos Pasos
Después de validar el ID Token, puede:
- Extraer información del usuario de las claims
- Utilizar el token para autenticar solicitudes
- Acceder a los endpoints de información del usuario
