gpt4 book ai didi

node.js - 注销Azure Passport身份验证Node js

转载 作者:搜寻专家 更新时间:2023-11-01 00:40:33 24 4
gpt4 key购买 nike

我有一个 Node js 应用程序,我们在其中使用了带有 Passport 身份验证的 Azure 登录。

我已使用 azure 成功登录,并且应用程序运行正常。

但是,当我注销并向页面提供 URL 时 - 它会检查身份验证并自动转到该页面而不要求登录。

登录后,我的网址包含以下查询字符串1. session 状态2、代码3. 状态4. 代币

登录代码:

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 服务上存在类似的 session 。不是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了解详情。

但是在Azure Passport oidcstrategy中,我们应该修改源代码以将参数添加到端点中。

安装 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';按照代码片段添加支持。

如有任何进一步的疑问,请随时告诉我。

编辑

Is there any way to prompt login only when i logged out...

我不确定您的意思是,您想检查用户访问 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('/');
});

关于node.js - 注销Azure Passport身份验证Node js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36054116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com