35 lines
978 B
JavaScript
35 lines
978 B
JavaScript
const jwksClient = require('jwks-rsa');
|
|
const jwt = require('jsonwebtoken');
|
|
const AUTH_CONFIG = require('./Auth0');
|
|
|
|
const jwks = jwksClient({
|
|
cache: true,
|
|
rateLimit: true,
|
|
jwksRequestsPerMinute: 1,
|
|
jwksUri: `https://${AUTH_CONFIG.domain}/.well-known/jwks.json`
|
|
})
|
|
|
|
|
|
const validateParseIdToken = idToken =>{
|
|
return new Promise((resolve, reject) => {
|
|
const { header, payload } = jwt.decode(idToken, { complete: true })
|
|
if (!header || !header.kid || !payload) reject(new Error('[Validate Token Error] Invalid Token'))
|
|
jwks.getSigningKey(header.kid, (err, key) => {
|
|
if (err) reject(new Error('[Validate Token Error] Error getting signing key: ' + err.message))
|
|
|
|
jwt.verify(
|
|
idToken,
|
|
key.publicKey,
|
|
{ algorithms: ['RS256'] },
|
|
(err, decoded) => {
|
|
|
|
if (err) reject('[Validate Token Error] ' + err.message);
|
|
resolve(decoded);
|
|
}
|
|
)
|
|
})
|
|
})
|
|
}
|
|
|
|
module.exports = validateParseIdToken;
|