用于 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 浏览器配置文件的标准用例。我建议继续阅读。网上有很多资料。
基本上流程是这样的。
- SP 和 IDP 交换元数据 XML。这可以通过任何方式完成,例如电子邮件或通过在网络服务器上发布 xml。这只在 SP 和 IDP 之间完成一次。
- 当 SP 想要对用户进行身份验证时,它会使用例如重定向和 SAML 身份验证请求将其发送给 IDP。
- IDP 对用户进行身份验证。
- 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
我在 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 浏览器配置文件的标准用例。我建议继续阅读。网上有很多资料。
基本上流程是这样的。
- SP 和 IDP 交换元数据 XML。这可以通过任何方式完成,例如电子邮件或通过在网络服务器上发布 xml。这只在 SP 和 IDP 之间完成一次。
- 当 SP 想要对用户进行身份验证时,它会使用例如重定向和 SAML 身份验证请求将其发送给 IDP。
- IDP 对用户进行身份验证。
- 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