SAML / ADFS node.js实现指南?

我想先说一下,说到现在为止,我甚至没有听说过SAML,更没有制定一个涉及它的SSO策略。 这一点,加上我几乎没有做节点一年的事实,使一个光荣的新手三明治。 目前,我有一个使用SAML和ADFS作为SSO提供者的客户端。 我已经使用passport.js进行本地login,因此使用passport-saml似乎是使用SAML / ADFS实施SSO的方法。 在做我的研究时,我发现了一些不同的实现指南,但是因为我几乎不知道这个过程,所以我可以使用一些指针。

在passport-saml文档中,我发现以下certificate可以与ADFS一起工作的策略(根据文档):

{ entryPoint: 'https://ad.example.net/adfs/ls/', issuer: 'https://your-app.example.net/login/callback', callbackUrl: 'https://your-app.example.net/login/callback', cert: 'MIICizCCAfQCCQCY8tKaMc0BMjANBgkqh ... W==', identifierFormat: null } 

我想我的主要问题是这个证书从哪里来? 这是我通过SSL在我的服务器上生成的证书吗? 提供者提供了吗?

在我的search中,我也发现了这个: https : //github.com/auth0/passport-wsfed-saml2 ,它是基于passport-saml的。 build议ADFS使用以下configuration:

 { path: '/login/callback', realm: 'urn:node:app', homeRealm: '', // optionally specify an identity provider identityProviderUrl: 'https://auth10-dev.accesscontrol.windows.net/v2/wsfederation', cert: 'MIIDFjCCAf6gAwIBAgIQDRRprj9lv5 ... =' } 

在这个例子中,path对象是显而易见的,我的提供者已经给了我一个providerURL。 但是,领域对我来说是没有意义的,而且还有那个certificate。

有人能给我提供一种在node.js站点中实现SAML / ADFS SSO的“解释式 – 我 – 五”方式吗? 或者帮助我制定我列出的两个解决scheme所要求的论点对象的正面或反面。 非常感谢提前!

我最近经历了同样的思考过程:从来没有听说过SAML ,我需要启用Web应用程序来通过SAML进行身份validation(而不是Active Directory)身份validation。

在实施过程中,我大量使用了OneLogin的文档和passport-saml库,两者都是我推荐的,尽pipe我并不隶属于这两者。

我意识到的是混淆是三重的:

(1)SAML是如何工作的,

(2) passport-saml库如何在Node中工作

(3)如何configuration身份提供者( OneLoginActive Directory或其他)。 接下来的是我对“解释性的 – 我 – 五”解释的尝试。

SAML

安全声明标记语言(SAML)是一种XML标准,允许用户根据浏览器会话进行login。 有很多,但基本上,它使一个更简单的身份validation过程。 用户可以点击一个button,而不是提交一个用户名和密码的表单。

SAML的工作方式有一点涉及。 我从OneLogin中发现了这个概述,附带的图表很有帮助:

SAML SSO流量,OneLogin.com

该图表示以下过程:

  1. 用户点击一个button,使用SAML为给定的应用程序(有时称为服务提供者)进行身份validation。 (请求节点或其他)build立一个SAML授权请求。
  2. 授权请求被构build。 此授权请求是XML( 请参阅OneLogin的更多信息 ),编码和/或encryption,并附加到URL作为查询参数。 节点将浏览器redirect到这个URL(类似https://domain.onelogin.com/trust/saml2/http-post/sso/123456?SAMLRequest=…encodedXML .. )。
  3. OneLogin作为身份提供者,从浏览器会话中确定用户是否已经login。如果不是,用户将被提示使用OneLogin的login表单。 如果是这样,浏览器将SAML响应POST回应用程序(服务提供者)。 这个SAML响应(又是XML)包含了有关用户的某些属性,如NameID。
  4. 回到Node,应用程序validationSAML响应并完成身份validation。

节点和passport-saml

Passport.js是Node的身份validation中间件。 它需要一个策略,可以像passport-local或在我们的情况下passport-saml

由于passport-local策略使用用户名/密码启用Passport身份validation,因此passport-saml策略使用浏览器会话和可configuration身份提供程序值启用Passport身份validation。

虽然passport-saml很好地服务了我的目的,但是它的文档很难理解。 configuration示例不起作用,因为OpenIdp身份提供程序处于非活动状态,并且有许多可configuration的参数。

我关心的主要是: entryPointpath (或callbackURL )。 我只需要这两个,它们执行以下操作:

  • entryPoint是使用授权请求redirect到的URL(参见上面的#2)。
  • path / callbackURL设置Node中的URL /路由以将SAML响应发送到(参见上面的#3)。

还有很多重要和有价值的其他参数,但可以使用这两个configurationSAML SSO。

身份提供者configuration

最后,身份提供者本身需要进行configuration,以便在给定SAML授权请求的情况下知道SAML响应的发送位置。 对于OneLogin,这意味着设置一个ACS (Consumer) URL和一个ACS (Consumer) URL Validator ,两者都应该匹配为passport-samlconfiguration的path / callbackURL

其他的东西可以configuration(支持注销和其他function),但这是最低限度的身份validation。


概要

原始问题有两个部分:(1)如何实现SAML / ADFS集成;(2)高级SAML node.js实现指南。 这个答案解决了第二个。

至于特别与Active Directory集成,我build议在ADFS上使用passport-saml的文档 ,请记住有两个部分:configurationpassport-saml以使用ADFS身份提供程序并configuration您的ADFS服务器以回应节点。

我可能在这里是错的,但我相信它来自在https://servername/FederationMetadata/2007-06/FederationMetadata.xmlfind的ADFS服务器XML。

拔出X509Certificate。 我遇到了同样的问题,接下来我会尝试。