首页 > 解决方案 > 如何使用 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 应用程序设置中配置 Azure 注销 URL 屏幕截图

每当应用程序遇到 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 会话注销的建议或解决方案!

标签: node.jsazure-active-directorypassport.jssaml-2.0passport-saml

解决方案


//如何发出注销请求?

Passportlogout()在 上显示一个函数req,可以从任何需要终止登录会话的路由处理程序调用该函数。调用logout()还将删除该req.user属性并清除登录会话(如果有)。您可以尝试Logoutconnect.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 集线器

. 注销 Azure Passport 身份验证节点 js | 所以线程


推荐阅读