使用Http-post方法在passport-saml中实现注销功能

pra*_*ani 5 node.js saml-2.0 passport.js

我们已经实施了SAML SSO,我们也使用了passport-saml.登录完全使用"http-post"作为authnRequestBinding.But我无法找到任何这样的注销方法.它显示注销默认为http重定向,这不能正常工作.

Vil*_*oja 4

首先,您需要在 Passport-saml 的配置中定义logoutUrllogoutCallback 。logoutUrl 是您的服务器将发送 logoutRequest 的 url。所以它是从您正在使用的身份提供商处获取的 URL。logoutCallback 顾名思义,是注销完成后浏览器(通过重定向)调用的callbackUrl。添加这些配置的方法如下:

module.exports = {
  development: {
    app: {
      name: 'Passport SAML strategy example',
      port: process.env.PORT || 8443
    },
    passport: {
      strategy: 'saml',
      saml: {
        logoutUrl: 'idp-logout-url-here',
        logoutCallback: 'your-logout-callback-url-here'
      }
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

然后,您需要在代码中的某个位置放置SamlStrategy,您将在其中使用上面定义的配置。当然配置也会有其他变量,我现在只是把注销相关的变量放在那里。

最后,您需要在节点应用程序中定义自己的注销路由,该路由将在调用时启动注销过程:

  app.get('/logout', function(req, res) {
    if (req.user == null) {
      return res.redirect('/');
    }
    return SamlStrategy.logout(req, function(err, uri) {
      return res.redirect(uri);
    });
  });
Run Code Online (Sandbox Code Playgroud)

从上面可以看到,它会调用SamlStrategy中定义的logout函数。所以passport-saml策略中定义了一个注销函数。如上所述,您需要给它一个回调函数,该函数会将响应重定向到 uri。该uri将是您之前定义的 logoutCallback url。

如果你想知道那里的 SamlStrategy 是什么,它实际上是 Passport-saml 的策略。我可以向您展示如何让它发挥作用。例如,在一个名为“saml-strategy.js”的单独文件中,输入以下内容:

const SamlStrategy = require('passport-saml').Strategy;
var config = require('./config.js')['development'];

module.exports = new SamlStrategy(
  {
    otherImportantvariable1: config.passport.saml.OtherImportantvariable1,
    logoutUrl: config.passport.saml.logoutUrl,
    logoutCallback: config.passport.saml.logoutCallback
  }
  function (profile, done) {
    user = Object.assign({}, profile);
    return done(null, user);
  }
);
Run Code Online (Sandbox Code Playgroud)

以与上面定义的注销相关变量相同的方式插入所有重要的配置变量。包括在第一步中创建的配置。

然后,您只需将 SamlStrategy 要求到您拥有路线的同一文件中即可:

const SamlStrategy = require('../config/saml-strategy');
Run Code Online (Sandbox Code Playgroud)

有什么不清楚的请追问!