本文目录#

引言#

Spring Security 5.7 之后推荐使用 OAuth2.1 组件构建授权服务器。多租户 SaaS 场景需要针对不同租户的身份源、客户端与策略进行隔离。本文介绍多租户设计、数据模型与安全策略。

租户模型#

  • Tenant:租户信息、品牌、配置;
  • IdentityProvider:OIDC、SAML、企业 AD;
  • ClientRegistration:为每个租户定义客户端;
  • Authorization:Token、Refresh Token 存储;
  • Policy:Scopes、角色与资源映射。

Spring Authorization Server 配置#

1
2
3
4
5
6
@Bean
public RegisteredClientRepository clientRepository(TenantService tenantService) {
return tenantId -> tenantService.findClient(tenantId)
.map(MyRegisteredClient::toRegisteredClient)
.orElse(null);
}
  • 使用 TenantContextHolder 解析请求中的租户标识(域名、Header);
  • OAuth2TokenCustomizer 扩展,写入租户 Claim。

身份源集成#

  • 支持租户自带身份源:通过 DelegatingAuthenticationProvider 动态路由;
  • OIDC 联邦登录:每租户维护 Issuer URIClientSecret
  • 内部用户库:使用 UserDetailsService + PasswordEncoder

授权策略#

  • 定义租户级 Scope:tenant:orders.read
  • 结合 AuthorizationConsentService 管理授权;
  • 多租户 Resource Server:读取 Token 中租户 ID,使用 BearerTokenAuthentication 构建 Authentication
  • 在网关层基于租户限制访问。

运维与审计#

  • 档案:记录租户注册、授权操作;
  • 监控:Micrometer spring.security.oauth2.authorization.server 指标;
  • Vault/KMS 管理租户密钥;
  • 定期轮换 ClientSecret,自动通知租户。

实战经验#

  • 构建多租户 SaaS 平台时,授权服务器部署为独立组件,客户端/令牌存储在 PostgreSQL;
  • 对高安全租户启用 mTLS;
  • 针对租户定制登录页,实现品牌化。

总结#

Spring Security OAuth2.1 为构建授权服务器提供了基础。通过多租户设计、动态租户上下文与策略控制,可以满足 SaaS 场景的身份管理需求。

参考资料#


本作品系原创,采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,转载请注明出处。