Spring Security SAML实现

时间:2014-08-27 13:03:10

标签: java spring-mvc saml spring-saml

我开始使用新的Spring项目,我计划使用SSO。我有红色的博客,并了解Spring安全性SAML将是SP的最佳解决方案。

所以我已经将Spring网站https://github.com/SpringSource/spring-security-saml提供的Spring Security SAML示例应用程序与Shibboleth IDP一起实现为SP。

IDP与LDAP服务器连接。我能够执行Spring安全性示例应用程序。

我很困惑如何使用Spring安全SAML扩展以及多个spring项目。

有关构建Spring SAML项目与多个Spring MVC应用程序集成的任何示例链接或建议都会有所帮助。

1 个答案:

答案 0 :(得分:8)

如果您的REST API仅由与它们一起部署的Web应用程序调用(在单个战争中,因此共享相同的HTTP会话),您可以使用Spring SAML + Spring Security来保护它们。

Spring SAML将用于针对远程IDP对用户进行身份验证并填充其权利(授予权限);然后,可以使用Spring Security为从UI调用的API定义安全策略。

如果您希望能够从远程客户端调用REST API,您可能需要查看Spring Security OAuth项目 - 因为这不再是关于Web单点登录的。

可以创建Spring SAML的中央安装,它可以处理所有SSO逻辑。当然,您需要实现一种机制,其中Spring SAML将有关经过身份验证的用户及其属性的信息传递给您的其他应用程序,并以安全的方式执行此操作。一种可能的方法(如果应用程序部署在同一个域上,因此可以共享cookie),可以:

  • 在Spring SAML中进行身份验证后,设置一个共享cookie,该cookie对所有其他应用程序都是可见的,例如由Spring SAML密钥签名,或使用共享密钥加密,cookie还应包含用户的属性
  • 这可以在自定义AuthenticationSuccessHandler中完成,随后可以将用户重定向到正确的应用程序(例如,基于某些自定义逻辑或中继状态)
  • 目标应用程序需要验证cookie(通过检查签名或使用共享密钥解密,可能执行其他检查),解析属性并启动基于cookie内容预先验证的会话

所有这些都可以通过Spring Security和Spring SAML的标准接口的实现来完成。但这不是一项微不足道的任务 - 主要考虑到您的实施中的任何安全漏洞都可能会损害您的应用程序的安全性。