【问题标题】:How to do Single Sign-Out SAML using passport-saml npm package?如何使用 passport-saml npm 包进行单点注销 SAML?
【发布时间】:2021-09-02 08:13:55
【问题描述】:

使用 npm 包 passport-saml 在 Azure AD 中使用单点登录流程的应用程序。

在 nodejs express 框架中构建的应用程序。

passport saml 配置如下 sn-p:

文件名 - 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 的 express 应用的代码 sn-p。

文件名 - 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 Single sign out SAML protocol。具有 SAML 注销请求的链接,它没有以 javascript 方式发出 SAML 请求的解释。

我不太确定配置中的 logoutUrl 和 Azure 设置中的前端注销 Url 之间的关系。

非常感谢任何手动执行 Azure AD 会话注销的建议或解决方案!

【问题讨论】:

    标签: node.js azure-active-directory passport.js saml-2.0 passport-saml


    【解决方案1】:

    //如何发出注销请求?

    Passport 在 req 上显示一个 logout() 函数,可以从任何需要终止登录会话的路由处理程序调用该函数。调用logout() 还将删除req.user 属性并清除登录会话(如果有)。 您可以尝试在 connect.js 文件中将以下 cmd 添加到 Logout

    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 中注册应用程序时不需要前通道 Logout URL。

    更多信息请参考以下链接:-

    .Microsoft Azure Active Directory Passport.js Plug-In | Git-Hub.

    .Logging out of Azure Passport authentication Node js | SO THREAD.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 2021-12-12
      • 2021-05-13
      相关资源
      最近更新 更多