我在使用护照(使用 passport-azure-ad 策略)对请求进行身份验证时遇到了问题。对 Azure Active Directory 的请求工作正常。我可以使用我的凭据登录。之后,我希望调用验证回调,根据 accessToken 等设置用户对象。然后我希望在用户对象可用的地方调用重定向路由函数。这是我的设置:
passport.serializeUser((accessToken, done) => {
done(null, accessToken);
});
passport.deserializeUser((accessToken, done) => {
done(null, accessToken);
});
passport.use(new OIDCStrategy({
// options for the azure AD strategy
identityMetadata: config.auth.identityMetadata,
clientID: config.auth.clientID,
clientSecret: config.auth.clientSecret,
redirectUrl: config.auth.redirectUrl,
responseType: 'code id_token',
responseMode: 'query',
allowHttpForRedirectUrl: config.auth.allowHttpForRedirectUrl,
isB2C: true,
passReqToCallback: false,
scope: config.auth.scope,
loggingLevel: 'error'
}, (iss, sub, profile, jwtClaims, accessToken, refreshToken, params, done) => {
console.log('1. VERIFY CALLBACK');
if (!accessToken) {
return done(new Error('No accessToken was given'), null);
}
return done(null, { accessToken, expires: params.expires_on, refreshToken });
}));
我的路线:
router.get('/auth/login', (req, res, next) => {
passport.authenticate('azuread-openidconnect', { failureRedirect: '/' })(req, res, next);
});
router.get('/auth/openid/redirect', (req, res, next) => {
passport.authenticate('azuread-openidconnect', { failureRedirect: '/' }, (err, user) => {
console.log('2. ROUTE REDIRECT');
return res.send('...then redirect existing user to profile page');
})(req, res, next);
});
10 次中有 2 次,我的期望是正确的,一切正常。其余时间从不调用验证回调,或者在它之前调用重定向路由函数,因此从不设置用户对象(用户为“假”)。
任何人都知道我该如何度过这个难关?