更新以解决您的编辑:
以下是您可以使用的一些 SAML 2 选项。
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 包,因为您只需设置一个元数据提供者)。
一旦您习惯了使用 Shibboleth 在线文档,它将对您有很大帮助。
如果您可以使用 Shibboleth SP 包而不是使用 OpenSAML 库实现 SAML 2 SSO 解决方案,我认为您将有更大的成功机会。我无法谈论其他全 Java SAML 2 SSO 解决方案,但与简单的 Shibboleth 2 SP 相比,它们看起来都很大而且过于企业化。