如何设置本地测试 SAML2.0 身份提供程序?
Posted
技术标签:
【中文标题】如何设置本地测试 SAML2.0 身份提供程序?【英文标题】:How do I set up a local test SAML2.0 Identity Provider? 【发布时间】:2014-09-06 21:01:48 【问题描述】:作为服务提供商 (SP),我编写了一个 node.js 服务来处理 SAML2.0 断言。我现在想测试这段代码。
我知道我可以使用各种基于云的服务来充当我的测试身份提供者 (IdP),但是这些需要公开我的新的、未经测试的 SP 端点。
目前我只是将一个手工制作的 SAML2.0 断言发布到我的 SP 端点,但我想要一个更真实的测试,尤其是测试 SP 发起的 SSO 的能力。
因此,我认为我需要在我的开发机器上运行一个本地 IdP,这样我就可以暂时将所有测试保持在本地和沙盒中。
你能为我推荐一个前进的道路吗?
【问题讨论】:
【参考方案1】:实际上,您无需发布端点即可使用公共 IDP。
SP 和 IDP 之间的所有通信要么通过您的浏览器完成(当然需要能够访问您的本地 SP 和公共 IDP),或者您的 SP 调用 IDP(当使用 HTTP-Artifact 配置文件时)。但是在通常情况下IDP从不直接调用SP,这意味着SP可以在本地运行而无需公开访问的URL。
可以以这种方式配置的公共 IDP 之一是SSO Circle。
如果您仍想在本地运行 IDP,Shibboleth 可能是您最简单的选择。
【讨论】:
感谢您的重要观察,即我的 SP 端点不需要公开。按照建议,我将使用 Shibboleth。我决定试试TestShib【参考方案2】:有一个开放的 Idp 可以在https://stubidp.sustainsys.com 上免费回复任何可用的 AuthnRequest。它将允许您以简单的形式设置您想要的主题 NameId,然后回复给 SP。如果您想设置自己的实例,可以在https://github.com/Sustainsys/Saml2 获得 stubidp 的源代码。
披露声明:我是 stubidp 的作者,但我不会从任何使用它的人身上赚钱,它完全作为免费服务提供。
【讨论】:
这已被证明非常有用且易于使用,比在云中设置测试 idp 或在本地安装软件要容易得多。感谢您提供。 是否可以在<ds:Signature>
元素内的<saml2:Assertion
元素内提供您的公钥数据?这是我用来验证 SAMLResponse 的 saml20 nodejs 模块所期望的结构。谢谢。【参考方案3】:
同意 Shibboleth - 其他人是 SimpleSAMLphp 和(如果您有 Windows Server)那么可能是 ADFS。
如果您走云路线,Azure Active Directory 是另一种选择 - 尽管它目前仅支持 SP Initiated。
【讨论】:
【参考方案4】:另一个选项是https://github.com/mcguinness/saml-idp。本地测试设置简单快捷(它是一个节点服务器)。我成功地使用它使用 cypress 实现了一些完整的端到端 SAML SSO 测试。
我们有一个 .net 核心应用程序,如果在开发环境中运行,我基本上只是在启动时运行 node server.js
。我将节点服务器的输出重定向到我们的 .net 核心 Web 应用程序的输出,因此我们可以在我们的应用程序日志旁边看到 SAML 请求/响应。效果很好。
【讨论】:
以上是关于如何设置本地测试 SAML2.0 身份提供程序?的主要内容,如果未能解决你的问题,请参考以下文章
SAML 2.0 单次注销问题 - IdP 应如何终止在不同用户代理中运行的 SP 会话?