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

Spring security 使用SAML扩展和Shibboleth在Spring中进行单点登录,spring-security,single-sign-on,saml-2.0,shibboleth,spring-saml,Spring Security,Single Sign On,Saml 2.0,Shibboleth,Spring Saml,我希望在基于Spring的应用程序中实现单点登录(SSO)身份验证层,以支持来自不同安全域的身份验证和授权。 我已经选择Shibboleth作为IdP,但我还没有确定我将为SP使用什么 这些选择包括: Spring Security SAML Extension:组件使新的和现有的应用程序都能够作为基于SAML 2.0协议的联合体中的服务提供者,并启用Web单点登录。Spring安全扩展允许在单个应用程序中无缝组合SAML2.0和其他身份验证和联合机制。所有在身份提供者模式下支持SAML 2.

我希望在基于Spring的应用程序中实现单点登录(SSO)身份验证层,以支持来自不同安全域的身份验证和授权。 我已经选择Shibboleth作为IdP,但我还没有确定我将为SP使用什么

这些选择包括:

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

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

所以,我有一些问题:

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

  • 致以最良好的祝愿,V.

    这两者的主要区别在于部署场景:

    • Shibboleth SP插件直接部署到Apache/IIS web服务器
    • Spring SAML嵌入到您的应用程序中
    两者都有利弊


  • 就可伸缩性和可维护性而言,直接使用Spring SAML作为SP是一个好主意吗
  • 春季SAML

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

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

  • 是否可以将外部SP与Spring Security一起使用?如何配置应用程序和/或应用服务器 (JBoss8.0-WildFly)
  • 是的,这是可能的,但需要努力。例如,您可以配置WildFly以加密格式设置共享域cookie,并在Spring安全配置中验证cookie


  • 我在哪里定义角色(每个场景)
  • 使用SpringSAML,您可以在处理SAML响应时定义角色,例如解析SAML属性。这是通过实现
    SAMLUserDetailsService
    接口并插入
    samlAuthenticationProvider
    来实现的

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

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


  • 哪个是值得的选择

  • 所有选项都允许您使用SAML2.0执行WebSSO。人们通常根据自己的需求(例如定制需求)、环境(使用的web服务器、应用服务器)、首选开发方法(Java、.NET、其他)、使用的框架、遗留代码进行选择。许多客户都使用Spring SAML和Shibboleth插件。

    这是一个非常好的、平衡的答案。@Vladimír Schäfer,如果您有任何想法:-