使用护照(使用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次,我的期望是正确的,一切正常。其余时间永远不会调用验证回调,或者在它之前调用重定向路由函数,因此永远不会设置用户对象(用户为'false')。
任何人都知道如何解决这个问题?
答案 0 :(得分:0)
据我了解,passport-azure-ad身份验证过程的工作方式如下:
我遇到了与您类似的问题,即可以使用azure登录,然后将调用replyURL,但随后我的浏览器将进入一个无限循环来调用ReplyURL,并且永远不会启动策略验证回调。
我设法确定我没有配置Express服务器来正确解析urlEncoded主体,这导致了以下代码行的无限循环...
app.use(bodyParser.urlencoded({ extended : true }));
我怀疑您可能遇到了同样的问题。
希望有帮助。