Node.js使用OneLogin实现SAML

时间:2017-09-12 03:15:52

标签: node.js saml onelogin passport-saml

我希望在OneLogin的应用程序目录中设置我们的应用程序,因此我需要创建一个SAML集成,据我所知。我确实看到他们有可用的工具包,但我在Node.js工作,没有适合该环境的工具包。

我一直在阅读他们的文档以及其他帖子,并认为该过程类似于以下内容: 1)向OneLogin发出请求以创建应用程序并将其添加到其目录中。 2)我的应用程序需要有一个我将提供给OneLogin的路由点,当有人点击我们的应用程序的图标时,该路由点将用作重定向。 3)用户在目录中单击我的应用程序的图标将标记用户并将其发送到我定义的路由点,并将信息作为SAML请求/ XML传递。 4)我的路由点需要使用SAML请求/ XML,然后执行我的内部登录过程。 OneLogin传递给我的路线点的信息将包括我的网站的必要信息,如名字,姓氏和电子邮件地址。然后,我将使用该信息执行内部应用程序,如果它对现有用户进行验证,我会将其视为成功登录,然后让它们继续。如果他们不是现有用户,我会通过用户创建类型表单发送它们,但可以默认来自OneLogin的SAML请求/ XML信息,或者只是自动创建用户。

看起来我对这个过程有很高的了解吗?

有没有人在Node.js中有例子?

我打算使用护照-SAML包。

1 个答案:

答案 0 :(得分:1)

是的,你走在正确的轨道上。

Passport-SAML适用于Express应用https://github.com/bergie/passport-saml

您的Passport SAML策略配置应如下所示。

passport.use(new SamlStrategy(
  {
    path: '/login/callback',
    entryPoint: 'https://{SUBDOMAIN}.onelogin.com/trust/saml2/http-redirect/sso/{APP_ID}',
    issuer: 'passport-saml'
  },
  function(profile, done) {
    console.log(profile);
    return done(null, profile);
  })
);

passport.serializeUser(function(user, done) {
  done(null, user);
});

passport.deserializeUser(function(obj, done) {
  done(null, obj);
});

请务必使用通过OneLogin门户配置应用时提供的SLO端点。

然后设置您的路线以使用Passport

// Initiates an authentication request with OneLogin
// The user will be redirect to OneLogin and once authenticated
// they will be returned to the callback handler below
app.get('/login', passport.authenticate('saml', {
  successReturnToOrRedirect: "/"
}));

// Callback handler that OneLogin will redirect back to
// after successfully authenticating the user
app.post('/login/callback', passport.authenticate('saml', {
  callback: true,
  successReturnToOrRedirect: '/users',
  failureRedirect: '/'
}))

您还需要确保已将ACS(消费者)URL设置为应用程序回调网址,并且您正在测试的用户可以访问该应用。