跳到主要内容
版本:7.0.2

OAuth 2.0 资源服务器

DeepSeek V3 中英对照 OAuth2 Resource Server OAuth 2.0 Resource Server

Spring Security 支持通过两种形式的 OAuth 2.0 Bearer Tokens 来保护端点:

  • JWT
  • 不透明令牌

这在应用程序将其权限管理委托给授权服务器(例如Okta或Ping Identity)的场景中非常方便。资源服务器可以咨询该授权服务器来对请求进行授权。

本节详细介绍了 Spring Security 如何为 OAuth 2.0 Bearer Tokens 提供支持。

备注

JWTOpaque Token 的示例代码均可在 Spring Security Samples 仓库 中找到。

现在我们可以探讨 Bearer Token 认证在 Spring Security 中的工作原理。首先可以看到,与基础认证类似,当客户端未通过认证时,服务器会返回 WWW-Authenticate 响应头:

bearerauthenticationentrypoint

图 1. 发送 WWW-Authenticate 标头

上图基于我们的SecurityFilterChain示意图构建。

1 首先,用户向 /private 资源发出未经身份验证的请求,而该用户未被授权访问此资源。

2 Spring Security 的 AuthorizationFilter 通过抛出 AccessDeniedException 来表明未认证的请求被拒绝

3 由于用户未经认证,ExceptionTranslationFilter 启动了开始认证流程。配置的 AuthenticationEntryPointBearerTokenAuthenticationEntryPoint 的一个实例,它会发送一个 WWW-Authenticate 响应头。RequestCache 通常是一个 NullRequestCache,它不会保存请求,因为客户端有能力重放其最初发出的请求。

当客户端收到 WWW-Authenticate: Bearer 头时,它就知道应该使用承载令牌重试请求。下图展示了承载令牌的处理流程:

bearertokenauthenticationfilter

图 2. 验证 Bearer Token

该图基于我们的SecurityFilterChain示意图构建。

1 当用户提交其承载令牌时,BearerTokenAuthenticationFilter 会通过从 HttpServletRequest 中提取令牌来创建一个 BearerTokenAuthenticationToken,这是一种 Authentication 类型。

2 接下来,HttpServletRequest 被传递给 AuthenticationManagerResolver,由其选择相应的 AuthenticationManager。随后,BearerTokenAuthenticationToken 被传入 AuthenticationManager 进行身份验证。关于 AuthenticationManager 的具体实现细节,取决于您配置的是 JWT 还是 opaque token

3 如果身份验证失败,则 Failure

  • SecurityContextHolder 被清空。

  • 调用 AuthenticationEntryPoint 以再次触发发送 WWW-Authenticate 头信息。

4 如果认证成功,则显示 成功

章节总结