SAML 2.0 扩展迁移
本文档提供了将 SAML 2.0 服务提供者从 Spring Security SAML Extensions 1.x 迁移到 Spring Security 的指导。由于 Spring Security 不提供身份提供者支持,因此迁移 Spring Security SAML Extensions 身份提供者不在本文档的讨论范围内。
由于这两种方法截然不同,本文档将更侧重于模式介绍,而非精确的查找替换步骤。
登录与注销
方法变更
Spring Security 在几个显著方面采取了与 Spring Security SAML Extensions 略有不同的方法。
简化启用
Spring Security SAML扩展对服务提供商的支持,是通过一系列过滤器实现的,这些过滤器需要以正确的顺序手动添加到Spring Security的各个过滤器链中。
Spring Security 的 SAML 2.0 服务提供者支持通过 Spring Security DSL 方法启用:saml2Login、saml2Logout 和 saml2Metadata。它会选择正确的过滤器进行添加,并将它们放置在过滤器链中的适当位置。
更强的封装性
与Spring Security SAML扩展类似,Spring Security的SAML支持也基于OpenSAML。扩展项目通过公共接口暴露OpenSAML,模糊了两个项目之间的界限,实际上强制依赖OpenSAML,并使升级到更高版本的OpenSAML变得更加复杂。
Spring Security 提供了更强的封装性。其公共接口不会暴露 OpenSAML 组件,任何在其公共 API 中暴露 OpenSAML 的类都会以 OpenSaml 作为前缀命名,以增强清晰度。
开箱即用的多租户功能
Spring Security SAML Extensions 曾提供轻量级支持,允许声明多个身份提供商,并在登录时通过 idp 请求参数进行访问。然而,这在运行时变更方面存在限制,且无法实现依赖方与断言方之间的多对多关系。
Spring Security 将 SAML 2.0 多租户功能构建在其默认 URL 和基础组件中,具体形式为 RelyingPartyRegistration。该组件充当依赖方元数据与断言方元数据之间的链接,所有配对都可通过 RelyingPartyRegistrationRepository 进行查找。每个 URL 代表一个待检索的唯一注册配对。
无论是AuthnRequests、Responses、LogoutRequests、LogoutResponses还是EntityDescriptors,每个过滤器都基于RelyingPartyRegistrationRepository构建,因此本质上都是多租户的。
示例矩阵
Spring Security 与 Spring Security SAML 扩展都提供了如何配置服务提供者(Service Provider)的示例:
您也可以在 Spring Security SAML Extension 的 GitHub 项目中查看一个展示示例。
Spring Security 不支持 SAML 2.0 响应的 HTTP-Redirect 绑定。根据 SAML 规范,由于 URL 长度和签名的限制,SAML 响应不允许使用 HTTP-Redirect 绑定。尝试使用此绑定可能会导致意外错误。在配置您的身份提供商时,请改用 HTTP-POST 绑定。
未移植的功能
目前仍有一些功能尚未移植过来,且暂无移植计划:
-
用于 SAML 2.0 响应的 HTTP-Redirect 绑定
-
Artifact 绑定支持