微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SAML / ADFS node.js实现指南?

我想先说说,到目前为止,我甚至没有SAML的HEARD,更不用说制定一个涉及它的SSO策略.那结合了我几年来一直在做节点的事实,使得一个光荣的新手三明治.目前,我有一个使用SAML和ADFS作为SSO提供商的客户端.我已经使用passport.js进行本地登录,所以使用护照 – saml似乎是使用SAML / ADFS实现SSO的方式.在我的研究中,我发现了几个不同的实现指南,但是由于我真的不知道这个过程,我可以用几个指针.

在护照 – saml文档中,我找到了一个证明与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在我的服务器上生成的证书吗?提供者是否提供它?

在我的搜索中,我也发现了这个:https://github.com/auth0/passport-wsfed-saml2,这是基于护照 – saml. ADFS建议使用以下配置:

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

在这个例子中,路径对象很明显,我的提供者已经给了我一个providerURL.但是,对我来说,领域没有任何意义,而且再次证明了这一点.

有人可以在node.js网站中为我提供实施SAML / ADFS SSO的“解释一样的五”方式吗?或者帮我制作出两个解决方案所要求的论证对象的头或尾部:非常感谢提前!

解决方法

我最近经历了同样的思想过程:从未听说过SAML,我需要启用一个Web应用程序,通过使用OneLogin作为身份提供者(而不是Active Directory)的SAML进行身份验证.在实施期间,我大量使用了OneLogin的文档和护照 – saml库,我建议,尽管我不隶属于.

我认识到的是,混淆是三重的:(1)SAML如何工作,(2)护照 – saml库如何在Node中工作,以及(3)如何配置身份提供者(OneLogin,Active Directory,或其他).接下来是我尝试一个“解释一样五进制”的解释.

SAML

安全断言标记语言(SAML)是允许用户根据浏览器会话登录的XML标准.它有很多,但基本上它可以实现更简单的身份验证过程.用户可以单击按钮,而不是使用用户名和密码提交表单.

SAML的工作方式更多地涉及.我发现this overview from OneLogin和附图有帮助:

SAML SSO flow,OneLogin.com

该图表示以下过程:

>用户点击按钮,使用SAML为给定的应用程序(有时称为服务提供商)进行身份验证.对节点或其他方式进行请求以构建SAML授权请求.
>构建授权请求.该授权请求是XML(see more on OneLogin),编码和/或加密,并作为查询参数附加到URL.节点将浏览器重定向到此URL(类似https://domain.onelogin.com/trust/saml2/http-post/sso/123456?SAMLRequest=…encodedXML...).
> OneLogin作为身份提供者,从浏览器会话确定用户是否已经登录,如果没有,用户将以OneLogin的登录表单提示.如果是这样,浏览器将SAML响应发回给应用程序(服务提供商).这个SAML响应(再次是XML)包括有关用户的某些属性,如NameID.
>返回到节点,应用程序将验证SAML响应并完成身份验证.

节点和护照saml

Passport.js是Node的认证中间件.它需要一种策略,这可以是护照本地的,或者在我们的例子中是护照.由于护照本地策略使用用户名/密码启用Passport身份验证,因此passport-saml策略可以使用浏览器会话和可配置的身份提供者值进行Passport身份验证.

虽然护照saml非常好地服务于我的目的,但其文档很难理解.配置示例不起作用,因为OpenIdp身份提供程序处于非活动状态,并且有大量可配置的参数.我关心的主要是:entryPoint和path(或callbackURL).我只需要这两个,它们执行以下操作:

> entryPoint是使用授权请求重定向到的URL(参见上面的#2).
> path / callbackURL在Node中设置要发布的SAML响应的URL /路由(参见上面的#3).

有许多其他参数是重要和有价值的,但可以使用这两个配置SAML SSO.

身份提供者配置

最后,身份提供者本身需要配置,以便在给定SAML授权请求时,它才知道发送SAML响应的位置.在OneLogin的情况下,这意味着设置一个ACS(消费者)URL和一个ACS(消费者)URL验证器,两者都应该匹配为护照saml配置的路径/ callbackURL.

可以配置其他东西(以支持注销和其他功能),但这是最低限度的认证.

概要

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

至于与Active Directory的专门集成,我建议您使用passport-saml’s docs on ADFS,请注意,有两个部分:配置护照saml以使用ADFS身份提供程序并配置ADFS服务器以响应Node.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐