node.js - 如何使用 passport-saml npm 包进行单点注销 SAML?
问题描述
使用 npm 包passport-saml在 Azure AD 中使用单点登录流程的应用程序。
在 nodejs express 框架中构建的应用程序。
护照 saml 配置看起来像这个片段:
文件名 - config.js
passport: {
strategy: 'saml',
saml: {
path: process.env.SAML_PATH ,
entryPoint: process.env.SAML_ENTRY_POINT || 'https://login.microsoftonline.com/tenant/saml2',
issuer: 'app id',
cert: process.env.SAML_CERT,
callbackUrl: "https://application_url/login/callback",
logoutUrl: 'https://login.microsoftonline.com/tenant/saml2',
}
}
在上面的配置入口点和 logoutUrl 是相同的。
使用护照 SAML 策略连接 Azure AD 的快速应用程序的代码片段。
文件名 - connect.js:
const SamlStrategy = require('passport-saml').Strategy;
const config = require('./config.js');
app.use(passport.initialize())
passport.serializeUser((user, done) => {
done(null, user);
});
passport.deserializeUser((user, done) => {
done(null, user);
});
passport.use(new SamlStrategy(config.passport.saml,
function (req, token, refreshToken, profile, done) {
}
))
/*express app router*/
app.get("/login", (req, res, next) => {
passport.authenticate(config.passport.strategy, { failureRedirect: "/" })(req, res, next);
})
app.post('/login/callback', (req, res, next)=> {
/*processing logic after the successful auth from Azure AD SAML*/
})
到目前为止,可以在 Azure AD 中执行 SAML 身份验证并收到登录回调。注意:在 Azure AD 应用程序的重定向 URI 中正确配置了登录回调。
继续,在快速应用路由器上执行注销时遇到问题。
LogoutUrl 在 Azure AD 应用程序设置中配置
每当应用程序遇到 movelogout 路由并且需要注销 Azure 广告会话时。如何使用 passport-saml 策略在此路由内向 Azure AD 发出注销请求?
代码继续文件名:connect.js
app.get('/movelogout', (req, res, next)=> {
//How to issue logout request ?
})
/*Callback for successful logout in Azure AD*/
app.post('/logout', (req, res, next) => {
//Do post logout operation
})
简而言之,我一直在尝试使用 passport-saml完成Azure 单点注销 SAML 协议。具有 SAML 注销请求的链接,它没有以 javascript 方式发出 SAML 请求的解释。
我不太确定配置中的 logoutUrl 和 Azure 设置中的前端注销 URL 之间的关系。
非常感谢任何手动执行 Azure AD 会话注销的建议或解决方案!
解决方案
//如何发出注销请求?
Passportlogout()
在 上显示一个函数req
,可以从任何需要终止登录会话的路由处理程序调用该函数。调用logout()
还将删除该req.user
属性并清除登录会话(如果有)。您可以尝试Logout
在connect.js
文件中添加以下 cmd
app.get('/logout', function(req, res){
req.logout();
res.redirect('/');
});
或者,
app.get('/logout', function (req, res) {
req.session.destroy();
req.logout();
res.redirect('/');
});
配置中的 logoutUrl 和 Azure 设置中的前端注销 Url 之间的关系。
基于这个MS DOC在 Node.js 中注册应用程序时不需要前通道注销 URL。
有关更多信息,请参阅以下链接:-
. Microsoft Azure Active Directory Passport.js 插件 | Git 集线器。
推荐阅读
- mobaxterm - Mobaxterm 使用脚本创建的书签文件夹等?
- typescript - Firebase + Typescript - ID 属性和 withConverter 问题(创建一个没有 ID 属性的新文档)
- shader - iOS14 ARDepthData 的分辨率是多少?
- c++ - DTOR not called when using shared_ptr
- parsing - 在 SLR 语法中减少时的理解
- scheme - 如何在 LISP 中附加两个列表的第一个元素
- python - Tkinter Window Composition Object causes Attribute Error
- c# - 单元测试无限轮询方法
- c# - 调用 C# 枚举来响应组件
- node.js - 如何在循环中“等待”来自异步函数的承诺/通过 Postmark API 发送带有附件的电子邮件