用于 Java 应用程序 运行 的 SAML Tomcat

SAML For Java Application Running on Tomcat

我在 tomcat 服务器上有一个 Java 应用程序 运行。我将用户信息存储在 mysql table 中,并使用 Java Rest 服务进行身份验证。 现在,当我登陆 customer.myapp.com 时,我想检查浏览器中是否存在 [ 的活动会话=22=]customer.com,如果在内部使用该会话登录到我的应用程序。如果没有会话,则将用户重定向到 customer.com 登录门户,登录后进入 customer.myapp.com 主页。

我如何使用 SAML 实现它。我已经阅读了理论部分并对 SP(在本例中为 customer.myapp.com)和 IdP(我假设它会客户的登录门户 customer.com) 。我什至下载了 OpenSAML jar。我不知道如何进行配置。就我而言,我无权访问 IDP。

public class EMSAMLObjectBuilder {
// Get the builder factory
XMLObjectBuilderFactory builderFactory = Configuration.getBuilderFactory();

// Get the assertion builder based on the assertion element name
@SuppressWarnings("unchecked")
SAMLObjectBuilder<Assertion> builder = (SAMLObjectBuilder<Assertion>) builderFactory.getBuilder(Assertion.DEFAULT_ELEMENT_NAME);

// Create the assertion
Assertion assertion = builder.buildObject();

}

这是我能找到的唯一一段代码。有什么帮助吗?

听起来像是 SAML Web 浏览器配置文件的标准用例。我建议继续阅读。网上有很多资料。

基本上流程是这样的。

  1. SP 和 IDP 交换元数据 XML。这可以通过任何方式完成,例如电子邮件或通过在网络服务器上发布 xml。这只在 SP 和 IDP 之间完成一次。
  2. 当 SP 想要对用户进行身份验证时,它会使用例如重定向和 SAML 身份验证请求将其发送给 IDP。
  3. IDP 对用户进行身份验证。
  4. IDP 将用户连同 SAML 身份验证响应发送回 SP

SAML 是一种非常灵活的协议,因此上面的流程可能会有所不同。元数据中通常更详细地指定了通信方式。

有多种实现方法,OpenSAML 就是其中之一。 OpenSAML official website 有一些有用的例子。

我写了一篇blog on OpenSAML with lots of helpful post on the subject. I have also written a book, A Guide to OpenSAML,详细介绍了SAML Web Browser Profile 服务提供者的实现步骤。

巧合的是书中的示例应用程序运行在嵌入式 tomcat.

我的感觉是,你永远不应该直接使用像 OpenSAML 这样的库,它们非常低级且难以掌握。 如果您想使用 SAML 登录过程保护您的 Web 应用程序,您当然应该为此使用安全库。 免责声明:我是 pac4j 的创建者,因此我可以推荐使用 pac4j 实现之一:http://www.pac4j.org/implementations.html for SAML: http://www.pac4j.org/docs/clients/saml.html