passport-fusionauth-bearer
Version:
HTTP Bearer authentication strategy for Passport and FusionAuth
35 lines (31 loc) • 1.01 kB
JavaScript
const { Strategy, ExtractJwt } = require('passport-jwt');
const { verifyOptions, setDefaults } = require('./options');
const OIDCManager = require('./oidcMatadata');
const defaultVerify = (jwtPayload, done) => {
if (jwtPayload) {
return done(null, jwtPayload);
}
return done(null, false);
};
class FusionauthBearerStrategy extends Strategy {
constructor(options, verify) {
verifyOptions(options);
const opts = setDefaults(options);
if (!opts.jwtFromRequest)
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
const oidcManager = new OIDCManager(opts.url, opts.log);
opts.secretOrKeyProvider = (req, token, done) => {
oidcManager
.pemKeyFromToken(token)
.then((key) => done(null, key))
.catch((err) => {
opts.log.warn(err);
done(err);
});
};
super(opts, verify || defaultVerify);
this.name = opts.name;
opts.log.debug('Strategy created');
}
}
module.exports = FusionauthBearerStrategy;