我想先说这个,直到现在,我甚至没有听过SAML,更不用说涉及它的SSO策略了。这一点,加上我几乎没有做节点一年的事实,就是一个光荣的新手三明治。目前,我有一个客户端使用SAML和ADFS作为他们的SSO提供商。我已经使用passport.js进行本地登录,因此使用passport-saml似乎是使用SAML / ADFS实现SSO的方法。在进行我的研究时,我发现了几个不同的实现指南,但由于我完全不了解这个过程,我可以使用一些指针。
在passport-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的“类似于解释的方式”吗?或者帮助我对我概述的两个解决方案所要求的论证对象做出正面或反面的讨论?非常感谢提前!
答案 0 :(得分:86)
我最近经历了相同的思考过程:从未听说过 SAML ,我需要启用一个Web应用程序,通过SAML将OneLogin作为身份提供程序(而不是Active Directory)进行身份验证。
在实施过程中,我大量使用了OneLogin的文档和passport-saml
库,我建议使用这两种文档,尽管我并不隶属于它们。
我开始意识到混乱是三重的:
(1)SAML如何运作,
(2)passport-saml
库如何在Node中工作,
(3)如何配置身份提供商( OneLogin , Active Directory 或其他方式)。接下来是我尝试了一种“类似于解释的解释”的解释。
<强> SAML 强>
安全断言标记语言(SAML)是一种XML标准,允许用户根据其浏览器会话登录。它有很多,但基本上,它可以实现更简单的身份验证过程。用户可以单击按钮而不是提交包含用户名和密码的表单。
SAML的工作方式更为复杂。我发现this overview from OneLogin和随附的图表很有帮助:
该图表示以下过程:
节点和passport-saml
Passport.js是Node的身份验证中间件。它需要一个策略,可以是passport-local
,或者在我们的例子中,passport-saml
。
由于passport-local
策略使用用户名/密码启用Passport身份验证,passport-saml
策略会使用浏览器会话和可配置的身份提供商值启用Passport身份验证。
虽然passport-saml
非常适合我的目的,但其文档难以推理。配置示例不起作用,因为OpenIdp身份提供程序处于非活动状态并且有 lot 的可配置参数。
我关心的主要内容:entryPoint
和path
(或callbackURL
)。我只需要这两个,它们执行以下操作:
entryPoint
是使用授权请求重定向到的网址(请参阅上面的#2)。path
/ callbackURL
在节点中设置要发布的SAML响应的URL /路由(请参阅上面的#3)。还有大量其他重要且有价值的参数,但只使用这两个参数就可以配置SAML SSO。
身份提供商配置
最后,需要配置身份提供程序本身,以便在给定SAML授权请求的情况下,它知道在何处发送SAML响应。对于OneLogin,这意味着设置ACS (Consumer) URL
和ACS (Consumer) URL Validator
,这两者都应与为passport-saml配置的path
/ callbackURL
匹配。
可以配置其他内容(支持注销和其他功能),但这是验证的最低要求。
<强>摘要强>
原始问题分为两部分:(1)如何实现SAML / ADFS集成和(2)高级SAML node.js实现指南。这个答案解决了第二个问题。
至于与Active Directory的专门集成,我建议passport-saml's docs on ADFS,请记住,有两个部分:配置passport-saml以使用ADFS身份提供程序并配置ADFS服务器以响应节点。
答案 1 :(得分:0)
我可能在这里错了,但我相信它来自https://servername/FederationMetadata/2007-06/FederationMetadata.xml
处的ADFS服务器XML。
取出X509证书。我有同样的问题,我将尝试下一步。
答案 2 :(得分:0)
对于问题的第一部分,证书来自提供者。请查看passport-saml文档。
只需取出身份提供者的公共签名证书(X.509),并确保将其格式化为PEM编码。格式正确的PEM编码证书将以-----BEGIN CERTIFICATE-----
开头,以-----END CERTIFICATE-----
结尾。