Spring security 使用SAML扩展和Shibboleth在Spring中进行单点登录
我希望在基于Spring的应用程序中实现单点登录(SSO)身份验证层,以支持来自不同安全域的身份验证和授权。 我已经选择Shibboleth作为IdP,但我还没有确定我将为SP使用什么 这些选择包括: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 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)组件
致以最良好的祝愿,V.这两者的主要区别在于部署场景:
- Shibboleth SP插件直接部署到Apache/IIS web服务器
- Spring SAML嵌入到您的应用程序中李>
- 提供对如何执行身份验证以及身份验证过程如何与应用程序交互的强大控制。例如,您可以创建自己的配置UI并动态添加IDP,创建自定义登录屏幕作为应用程序的一部分,完全轻松地控制错误处理,轻松支持多个IDP,动态配置SSO的详细信息(请求的AuthnContexts、NameID、绑定、身份验证强制)李>
- 轻松解析各种格式的SAML属性,在同一应用程序中支持多种身份验证方法李>
- 动态生成SP元数据,它提供有限的多租户,并支持所有其他选项(例如单次注销、密钥持有者、IDP发现)中不可用的配置文件李>
- 与Spring Security无缝交互,Spring Security自身带来了一系列好处。使用Spring SAML,您还可以直接在应用程序中配置完整的身份验证和授权策略(例如,哪些页面需要身份验证,何时需要身份验证,基于角色的内容访问控制,动态条件下的身份验证升级等等)
- 允许您在任何应用程序服务器或容器上以及任何反向代理或web服务器后面部署应用程序,而不影响功能
- 它们是静态配置的,通常通过HTTP头与应用程序交互。它们将身份验证逻辑与应用程序本身分离,因此您需要注意的唯一一件事是接受头并使用正确的安全上下文初始化应用程序会话。安全页面的定义在IIS/Apache服务器上,并基于URL模式,这意味着身份验证和授权策略部分是在应用程序外部定义的李>
- 您需要确保应用程序只能通过web服务器访问(=禁止所有直接访问),因为这将允许伪造标头
- 不需要对应用程序本身进行很多更改,因此通常可以轻松地与遗留系统一起使用
SAMLUserDetailsService
接口并插入samlAuthenticationProvider
来实现的
使用Shibboleth,您可以将从IDP接收到的属性转发到应用程序,并在应用程序中解析它们
WildFly(可能)允许您直接在SP中定义安全上下文和角色,而无需在应用程序中进行配置。这种配置可能无法跨应用程序服务器进行移植
所有选项都允许您使用SAML2.0执行WebSSO。人们通常根据自己的需求(例如定制需求)、环境(使用的web服务器、应用服务器)、首选开发方法(Java、.NET、其他)、使用的框架、遗留代码进行选择。许多客户都使用Spring SAML和Shibboleth插件。这是一个非常好的、平衡的答案。@Vladimír Schäfer,如果您有任何想法:-