如何设置本地测试 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 身份提供程序?的主要内容,如果未能解决你的问题,请参考以下文章

Spring - 如何使用 SAML 2.0 实现单点登录

使用 SAML 2.0 的自签名证书

SAML 2.0 单次注销问题 - IdP 应如何终止在不同用户代理中运行的 SP 会话?

如何使用 SAML 2.0 响应进行特定 DNN 用户角色组身份验证和授权?

SAML2.0 浅入深出《一》

使用 SAML 2.0 作为 SSO 的外部身份提供者的身份服务器 4