我有一个节点js应用程序,我们在其中使用了带有护照身份验证的Azure登录。
我已经成功使用azure登录,并且该应用程序运行正常。
但是,当我注销并为页面提供url时-它会检查身份验证,并自动转到该页面而不要求登录。
登录后,URL包含以下查询字符串1. session_state 2. code 3. state 4. token
登录代码:
app.get('/login', passport.authenticate('azuread-openidconnect', { failureRedirect: '/' }), function (req, res) {
res.sendFile(path.join(__dirname+'/index.html'));
});
注销代码:
app.get('/logout', function (req, res) {
req.session.destroy();
req.logout();
res.redirect('/');
});
当我注销时,页面重定向到我的索引页面。然后,当我在网址中输入“ / login”时,它将带我进入该页面,而无需登录页面
请帮助摆脱这个...
此问题是由OAuth 2.0的授权代码授予流程引起的。诸如此类,Azure AD OAuth 2.0服务上有任何会话。这不是passportjs
或的问题expressjs
。
我们可以进行以下简单测试,在浏览器中访问身份验证端点, https://login.microsoftonline.com/common/oauth2/authorize?response_type=id_token%20code&client_id=<client_id>&redirect_uri=<redirect_uri>&response_mode=query&scope=openid
您将需要首先填写电子邮件和密码,完成登录流程后,第二次访问端点时,您将不再需要填写电子邮件或密码。
我们可以在授权端点中将url参数设置prompt
为login
,以强制用户每次重新进行身份验证。
您可以参考https://msdn.microsoft.com/en-us/library/azure/dn645542.aspx#code-snippet-3了解详细信息。
但是在天青的护照设计中,我们应该修改源代码以将参数添加到端点中。
安装passport-azure-ad
模块后/node_modules/passport-azure-ad/lib/passport-azure-ad/oidcstrategy.js
,在第545行(或多或少)打开文件,您可以找到以下代码片段:
var params = {};
if (self.authorizationParams) { params = self.authorizationParams(options); }
params['response_type'] = config.responseType;
log.info('We are sending the response_type: ', params['response_type']);
params['client_id'] = config.clientID;
params['redirect_uri'] = callbackURL;
...
我们可以params['prompt'] = 'login';
在代码段后添加句子以添加支持。
如有任何其他疑问,请随时告诉我。
有什么方法只能在我注销时提示登录...
我不确定您的意思是,您要检查用户访问login
路由时是否经过身份验证,如果是,是否不提示登录流程?
如果是这样,您可以自定义中间件以检查已通过身份验证。例如:
function checkAuthenticatedOnLogin(req,res,next){
if (!req.isAuthenticated()) {
return next();
}else{
res.send('do not need login');
}
}
app.get('/login',checkAuthenticatedOnLogin,
passport.authenticate('azuread-openidconnect',{ failureRedirect: '/login' }),
function(req, res) {
log.info('Login was called in the Sample');
res.redirect('/');
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句