13

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

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

我进行了一些探索,发现 SAML 是一种我们可以采用的好方法,但我们不确定要如何进行。

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

所以我只是在寻找以前遇到过类似问题的人的一些建议。

另一个问题是,如果我需要使用 OpenSaml 实现 SP,我可以研究哪些资源?看起来我可以参考的教程或示例并不多。

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

编辑1:

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

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

4

3 回答 3

13

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

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

但是由于 Shibboleth 实现了整个事情,并且具有它的所有功能,因此配置起来可能很麻烦。

我们用 Shibboleth 做了一个项目(诚然,它是一个边缘用例),对我来说,当时是一个 SAML 新手,让所有东西都启动并正常工作真的是一件苦差事。

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

我们能让 Shibboleth 更快地工作吗?大概。但我认为我们不会像我们自己那样理解它。当然,这里有点“未发明”,但是当您确实了解软件和词汇时,这些东西就足够令人困惑了,当您不了解时就更不用说了。SAML 充满了新词汇。

您还可以考虑使用SimpleSAML作为 IdP 并为您的 Web 应用程序编写自己的 SP。SimpleSAML 在 PHP 中,但它对用户更友好一些。您可以将其视为自包含的 apache 服务。

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

令人沮丧的是,这确实并不简单,但在收养等方面有点鸡/蛋的事情。

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

于 2012-07-10T22:57:18.277 回答
3

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

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

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

但是,如果您可以更详细地解释您想要实现的目标,那将非常有帮助;我觉得你的问题很开放......

于 2012-07-10T22:36:27.020 回答
0

我没有使用 Shibboleth Service Provider 的个人经验,但我目前正在开发使用 Shibboleth IdP、Shibboleth Discovery Service 和Guanxi Service Provider的架构。将 Guanxi Service Provider 的轻量级 Guard 模块与 Java webapp 集成是小菜一碟,无需编写自己的模块即可轻松获得基于 Shibboleth 的架构。有localhost设置关系 SP 的教程,跳过关于关系 WAYF 和 IdP 的部分,使用 Shibboleth 组件代替它们。

于 2012-07-12T09:38:41.663 回答