为了实施 SAML,我是不是需要在主机上安装 Shibboleth SP?

Posted

技术标签:

【中文标题】为了实施 SAML,我是不是需要在主机上安装 Shibboleth SP?【英文标题】:In order to implement SAML do I need Shibboleth SP installed on my host?为了实施 SAML,我是否需要在主机上安装 Shibboleth SP? 【发布时间】:2012-02-07 02:42:21 【问题描述】:

我有几个 SAML 实施问题来解决我的困惑......

我需要在 Java 网络应用中实现 SSO。

    为此,我需要在我的主机like so 上安装 Shibboleth SP,还是可以通过 OpenSAML 提供 SP 功能?

    我假设 shibboleth 的作用与 OpenSAML 相同,但只是在 Web 服务器级别,而 OpenSAML 将在软件方面进行。这个假设正确吗?

编辑: 所以 shibboleth(根据 Scott Cantor 的说法)是使用 OpenSAML 构建的...... 我的假设仍然成立吗?

    使用 OpenSAML 需要什么?只是 IdP 网址和在 idP 上的注册?

    是否需要提供 SP 目录,例如ActiveDirectory/LDAP?

编辑:感谢您的回答,但有人可以直接回答问题吗 上面并详细说明...

【问题讨论】:

【参考方案1】:

更新以解决您的编辑:

这里有一些您可以使用的 SAML 2 选项。

PingFederate https://www.pingidentity.com/ 帮助您了解 SAML 和 SSO 的好东西。商业化并被许多公司使用。 JOSSO All-Java http://www.josso.org/confluence/display/JOSSO1/JOSSO+-+Java+Open+Single+Sign-On+Project+Home,LGPL 2.1 或更高版本 LASSO Java APIs over native implementation。 http://lasso.entrouvert.org/ 双重许可(仅限非商业用途免费)。 OpenAM 全Java http://java.net/projects/opensso/,CDDL 1.0 Shibboleth SP C++,http://shibboleth.internet2.edu/,Apache 许可证,2.0 版。 OpenSAML 库 Java 或 C++,https://wiki.shibboleth.net/confluence/display/OpenSAML/Home/ Apache 许可证,版本 2.0。 已失效的 OpenSSO(成为 OpenAM)全 Java http://java.net/projects/opensso/,CDDL 1.0 Shibboleth IdP All-Java 这不是 SP,只是 IdP,可用于测试您的 SP。

Shibboleth SP 是为您实现 SAML 2.0 的产品,但 OpenSAML 只是一个,您可以使用它来实现 SAML 2.0 解决方案。该库本身是低级的,甚至还没有成为 SSO 解决方案。 OpenSAML 本身并不是 SAML 2.0 解决方案。

要使用 OpenSAML 或任何 SAML 2.0 解决方案,您需要交换元数据,如下所述。使用 OpenSAML,您还必须为自己的元数据手动生成 XML 文件。如下所述,这将是很多工作。 SAML 2.0 产品将为您生成该 XML 元数据文件,并生成用于加密和签署 SAML 2.0 断言的所需 RSA 密钥。使用 OpenSAML,您将获得用于加载部分 XML 文件的 API 支持以及用于生成和解析断言的 API,但您将编写实际构建 SSO 交互的 Java 代码。

SP 确实不一定需要 ActiveDirectory/LDAP,但您需要在 Web 应用程序中使用某种类型的目录来跟踪用户。如果您的 Web 应用程序已经有了用户概念以及一些可用于将其与 IdP 的用户概念相关联的识别信息,您可以根据 SAML 2.0 断言中的属性值将这些信息映射到您的 Web 应用程序中。 (如果您的 Web 应用程序不关心用户是谁,那么您可以简单地根据用户“有效”来允许访问该应用程序。)

--

将 Shibboleth2 SSO 与 Java Web 应用程序集成并不太难。使用 OpenSAML 来实现 SSO 是可行的,但它比将 Apache 服务器与 Shibboleth 集成要多得多。

使用 Shibboleth 要求您拥有启用了 Shibboleth 模块的 Apache2并且您安装了 Shibboleth SP 守护程序。通常,它们会放在同一个盒子上。如果您使用 Tomcat 来托管 Java Web 应用程序,那么我建议您使用 mod_proxy_ajp 在 Apache2 HTTP 服务器和 Tomcat 之间进行通信。这样,您可以将 Shibolleth 提供的变量作为 servlet 请求属性。 (您必须在 shibboleth2.xml 中将变量前缀设置为“AJP_”。)

Shibboleth SP 包已经处理了您可能会遇到的所有标准 SAML SSO 场景,但是尝试在 Java 应用程序中直接使用 OpenSAML 实现其中的一种场景,无论是使其正常工作还是从使其安全。如果您使用 OpenSAML,您还将增加 Web 应用程序的大小。值得注意的是,Shibboleth SP 不是用 Java 编写的,因此您不会有使用 OpenSAML 的示例,但您可以通过查看 Shibboleth IdP 代码(一个 Java Web 应用程序)获得一些见解。

在任何一种情况下,您都需要与身份提供者交换您的 SP 元数据(使用 Shibboleth SP 包轻松创建),并在您的 SP 上获取身份提供者的元数据(使用 Shibboleth SP 包也很容易,因为您只需设置一个 MetadataProvider)。

一旦您习惯使用 Shibboleth 在线文档,它将对您有很大帮助。

我认为,如果您可以使用 Shibboleth SP 包而不是使用 OpenSAML 库实施 SAML 2 SSO 解决方案,那么您将有更大的成功机会。我无法谈论其他全 Java SAML 2 SSO 解决方案,但与简单的 Shibboleth 2 SP 相比,它们似乎都很大且过于企业化。

【讨论】:

【参考方案2】:

使用 OpenSAML 需要什么?只有 IdP url 和 idP 注册?

你需要 Java 和一个 web 容器,并在你的战争中包含 opensaml 库。

您需要在本地缓存 IdP 元数据,或者每次要发送 AuthnRequest 或处理 SAMLResponse 时查找它。此外,您必须在 IdP 端注册您的 SP 元数据。

如果您使用 Shibboleth 作为您的 IdP,则应在 conf/relying-party.xml 文件中设置 SP 元数据。

我是否需要提供一个 SP 目录,例如ActiveDirectory/LDAP?

为了登录IdP,你需要在IdP端设置ldap或数据库服务器,并在conf/attribute-resolver.xml和conf/login.config中配置。

【讨论】:

【参考方案3】:

您应该将此类问题发布到 Shibboleth 项目运行的相关邮件列表。

OpenSAML 是一个用于实现 SAML 解决方案的非常低级的工具包,Shibboleth 是一个 SSO 包,用于支持 SAML 的 Web 应用程序,恰好是使用 OpenSAML 构建的。构建安全解决方案很复杂,需要专业知识。如果您不具备这种专业知识,那么您的工作就会很糟糕,而且 OpenSAML 没有记录在案,因此典型的开发人员可以从头开始构建解决方案。

考虑使用完整的实现,无论是 Shibboleth 还是其他。如果您不能使用 Apache 和本机代码并且需要 Java,那么您应该尝试现有的 Java SP 选项之一。即使它们不够用,您也应该在它们的基础上再接再厉,而不是重复它们。

【讨论】:

你能举出“现存的 Java SP 选项”的例子吗?【参考方案4】:

是的,您应该在您的服务器或机器上安装 SP。这取决于您的网络服务器,例如 IIS 或 Apache。

【讨论】:

以上是关于为了实施 SAML,我是不是需要在主机上安装 Shibboleth SP?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring SAML 作为 IDP 而不是 SP

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

LDAP 与 SAML 授权

使用 SAML 2.0 的自签名证书

Okta SAML 登录不成功

使用 .Net Core 5 MVC 为多个 IDP 实施 SAML2