使用SAML扩展和Shibboleth在Spring中单点登录

vde*_*ris 22 spring-security shibboleth single-sign-on saml-2.0 spring-saml

我想在我的基于Spring的应用程序中实现单点登录(SSO)身份验证层,目的是支持来自不同安全域的身份验证和授权.我选择Shibboleth作为IdP,但我还没有确定我将用于SP的内容.

选择是:

  • Spring Security SAML Extension:组件使新的和现有的应用程序能够在基于SAML 2.0协议的联合中充当服务提供者,并启用Web单点登录.Spring Security Extension允许在单个应用程序中无缝组合SAML 2.0和其他身份验证和联合机制.所有在身份提供商模式下支持SAML 2.0的产品(例如ADFS 2.0,Shibboleth,OpenAM/OpenSSO,RM5 IdM或Ping Federate)都可用于连接Spring Security SAML Extension.

  • Shibboleth(也称为SP):Shibboleth是一种基于Web的技术,可实现SAML的HTTP/POST,工件和属性推送配置文件,包括身份提供程序(IdP)和服务提供程序(SP)组件.

所以,我有一些问题:

  1. 在可扩展性和可维护性方面,直接使用Spring SAML作为SP是一个好主意吗?
  2. 可以将外部SP与Spring Security一起使用吗?我如何配置我的应用程序和/或我的应用程序服务器(JBoss 8.0 - WildFly)?
  3. 我在哪里定义角色(针对每个场景)?
  4. 哪个值得选择?

最好的问候,V.

Vla*_*fer 46

两者之间的主要区别在于部署方案:

  • Shibboleth SP插件直接部署到Apache/IIS Web服务器.
  • Spring SAML嵌入在您的应用程序中.

两者都有利有弊.


  1. 在可扩展性和可维护性方面,直接使用Spring SAML作为SP是一个好主意吗?

春天SAML

  • 可以很好地控制身份验证的执行方式以及身份验证过程如何与您的应用程序进行交互.您可以创建自己的配置UI并动态添加IDP,创建自定义登录屏幕作为应用程序的一部分,完全轻松地控制错误处理,轻松支持多个IDP,动态配置的SSO详细信息(请求的AuthnContexts,NameID,绑定) ,身份验证强制).
  • 轻松解析收到的各种格式的SAML属性,支持同一应用程序中的多种身份验证方法.
  • 动态生成SP元数据,它提供有限的多租户并支持所有其他选项中不可用的配置文件(例如,单点注销,密钥持有者,IDP发现).
  • 与Spring Security无缝交互,带来了自己的一系列好处.使用Spring SAML,您还可以直接在您的应用程序中配置完整的身份验证和授权策略(例如,哪些页面需要身份验证,何时以及何时,基于角色的内容访问控制,动态条件下的身份验证升级......).
  • 允许您在任何应用程序服务器或容器上以及任何反向代理或Web服务器后面部署应用程序,而不会影响功能.

Shibboleth插件

  • 这些是静态配置的,通常通过HTTP标头与您的应用程序进行交互.它们将认证逻辑与应用程序本身分离,因此您唯一需要注意的是接受标头并使用正确的安全上下文初始化应用程序会话.安全页面的定义存在于IIS/Apache服务器上并基于URL模式,这意味着身份验证和授权策略部分地在应用程序之外定义.
  • 您需要确保只能通过Web服务器访问应用程序(=禁止所有直接访问),因为这样可以伪造标头.
  • 不需要对应用程序本身进行很多更改,因此通常可以轻松地与遗留系统一起使用.

  1. 可以将外部SP与Spring Security一起使用吗?我如何配置我的应用程序和/或我的应用程序服务器(JBoss 8.0 - WildFly)?

是的,这是可能的,但需要付出努力.例如,您可以配置WildFly以加密格式设置共享域cookie,并在Spring Security配置中验证cookie.


  1. 我在哪里定义角色(针对每个场景)?

使用Spring SAML,您可以在处理SAML响应时定义角色,例如解析SAML属性.这是通过实现SAMLUserDetailsService接口和插入到samlAuthenticationProvider.

使用Shibboleth,您可以使用标头将从IDP接收的属性转发到您的应用程序,并在您的应用程序中解析它们.

WildFly(可能)允许您直接在SP中定义安全上下文和角色,而无需在应用程序中对其进行配置.此类配置可能无法跨应用程序服务器移植.


  1. 哪个值得选择?

所有选项都可以让您使用SAML 2.0执行WebSSO.人们通常根据他们的要求(例如定制需求),环境(使用的Web服务器,应用程序服务器),首选的开发方法(Java,.NET,其他),使用的框架,遗留代码进行选择.Spring SAML和Shibboleth插件都被许多客户使用.