java - 用于在 Tomcat 上运行的 Java 应用程序的 SAML

标签 java tomcat single-sign-on saml-2.0 opensaml

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

我如何使用 SAML 实现它。我已经学习了理论部分并对 SP(在本例中为 customer.myapp.com)和 IdP(我假设它将是客户的登录门户客户.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 网络浏览器配置文件的标准用例。我建议继续阅读。网上有很多资料。

基本上流程是这样的。

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

SAML 是一种非常灵活的协议(protocol),因此上面的流程可以有所不同。元数据中通常更详细地指定了如何进行通信。

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

我写一个blog on OpenSAML有很多关于这个主题的有用帖子。我还写了一本书,A Guide to OpenSAML ,其中详细介绍了 SAML Web 浏览器配置文件服务提供商的实现。

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

关于java - 用于在 Tomcat 上运行的 Java 应用程序的 SAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40039730/

相关文章:

java - 如何使用 Jersey Rest Webservices 和 Java 解析 JSON 数组

java - Tomcat Web 应用程序需要使用 SSL 客户端身份验证吗?

java - 意外的 Servlet 缓存

asp.net - 使用表单例份验证的单点登录

asp.net-mvc - ADFS 2.0 Windows 2008 R2 Web API

java - 聊天应用程序、套接字与 RMI

Java ObjectMapper.readValue 将泛型类型转换为 LinkedHashMap

java - 如何从 Hibernate Session 获取 java.sql.Connection 对象

java - Java Rest API JAX-RS 中的多个参数 - GET 方法

安卓单点登录