如何实施或集成 SAML 和 Shibboleth 的单点登录

2022-09-04 20:42:00

我们有两个独立的产品,包括Web应用程序和服务器。

我们希望为它们两者实现单一登录,因此当用户登录到一个产品时,他可以自动访问属于他的另一个产品中的资源。

我已经探索了一下,发现SAML是我们可以采取的好方法,但我们不确定我们想要如何继续。

实施我们自己的服务提供商是一个好主意吗?我看过Shib SP,但看起来如果我想将其集成到我的产品中,那也不会那么容易。

因此,我只是从以前遇到过类似问题的人那里寻找一些建议。

另一个问题是,如果我需要使用OpenSaml实现SP,我可以研究什么资源?看起来我没有很多教程或示例可以参考。

如果有人能指出我自己的SP需要包含的一些大型过程或组件,我将不胜感激。

编辑1:

只是尝试提供有关我想要的更多细节。我们有两个独立的产品。目前,我们能够外部化用户数据库。例如,我们的产品可以配置为连接到 LDAP 服务器或任何其他外部用户数据库,只要它们正确实现服务即可。

现在我们的目标是,我们希望这两款产品都采用 SSO。一种情况是,我们在两个产品中都有自己的 SP 组件(实现或集成)。客户可能拥有自己的 IdP。通过某些配置,我们的 SP 可以连接到其 IdP,并从那里进行身份验证,用户无需登录两次即可访问这两个产品。原因,如果客户没有,我们可以提供开箱即用的IdP。


答案 1

Shibboleth的最大困难在于它实际上是SAML v2.0规范的参考实现。

但是,对于大多数例行安装,您实际上只需要很少的 SAML 规范即可为 SSO 启用几个 Web 应用。

但是,由于Shibboleth实现了整个事情,并且具有所有功能,因此它可以成为配置熊。

我们用Shibboleth做了一个项目(诚然,这是一个边缘用例),对于我来说,当时的SAML新手来说,让一切正常运转起来真的是一件苦差事。

对于我们的下一个测试,我通过 Web 配置文件查看了 SSO 的 SAML 规范。如果你读过它,对于这个有限的用例来说,它实际上非常简单。我们决定不再使用Shibboleth,而是使用OpenSAML库编写自己的IdP和SP。

我们能不能让Shibboleth工作得更快?可能。但我不认为我们会像我们自己那样理解它。当然,这里有一点非发明,但是当你理解软件和词汇时,这些东西已经足够令人困惑了,当你不理解时,就更不用说了。SAML充满了新的词汇。

你还可以考虑使用 SimpleSAML 作为 IdP,并为 Web 应用编写自己的 SP。SimpleSAML是PHP,但它更加用户友好。您可以将其视为独立的apache服务。

我会说我们的SP大约有1000行javadoc代码,但它主要是将OpenSAML的东西连接在一起,还有一些实用的东西。事实上,它并没有那么可怕。不过,请准备好真正享受阅读签名的 XML blob。

令人沮丧的是,这真的不简单,但是在收养等方面,这有点像先有鸡还是先有蛋的事情。

如果这些都不适合您,您可以查看OAuth2及其一些配置文件。


答案 2

如果您只想在2个产品之间实现SSO,我认为是的,从头开始构建一些东西更容易。如果是Java,Shibboleth的OpenSaml是一个非常好的库。

当你开始实现更多的东西和一些复杂的场景时,选择已经构建的东西是最好的选择。您还应该注意每个系统可能编写的几个内容(例如断言生成,xml-dsig,验证等)。

乍一看,似乎已经构建的产品似乎太复杂或难以扩展或适应您的特定需求。但是,当你想要爆炸所有 SAML 功能时,你编写连接器和实现的开发工作可能会得到回报。

不过,如果你能更详细地解释你想实现什么,那将是非常有帮助的。我觉得你的问题很开放...


推荐