OAuth 2.0 资源服务器
本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。 |
Spring Security支持通过使用两种形式的OAuth 2.0 Bearer Token 来保护端点。
-
Opaque (不透明)Token
在应用程序将其权限管理委托给 授权服务器(例如,Okta或Ping Identity)的情况下,这很方便。资源服务器可以查询这个授权服务器来授权请求。
本节详细介绍Spring Security如何为OAuth Bearer Token 提供支持。
JWT 和 Opaque Token 的示例都可以在 Spring Security Samples仓库中找到。 |
现在我们可以考虑 Bearer Token 认证是如何在Spring Security中工作的。首先,我们看到,与 Basic Authentication 一样, WWW-Authenticate 头被响应给未认证的客户端。
上图建立在我们的 SecurityFilterChain
图上。
首先,用户向未经授权的 /private
资源发出未经认证的请求。
Spring Security 的 AuthorizationFilter
通过抛出一个 AccessDeniedException
来表明未经认证的请求被拒绝了。
由于用户没有经过认证,ExceptionTranslationFilter
启动了开始认证。配置的 AuthenticationEntryPoint
是 BearerTokenAuthenticationEntryPoint
的一个实例,它发送一个 WWW-Authenticate
头。RequestCache
通常是一个不保存请求的 NullRequestCache
,因为客户端有能力重放它最初请求的请求。
当客户端收到 WWW-Authenticate: Bearer
header时,它知道它应该用一个 bearer token 重试。下面的图片显示了正在处理的 bearer token 的流程。
该图建立在我们的 SecurityFilterChain
图上。
当用户提交他们的 bearer token 时,BearerTokenAuthenticationFilter
通过从 HttpServletRequest
中提取令牌,创建一个 BearerTokenAuthenticationToken
,这是一种 Authentication
类型。
接下来,HttpServletRequest
被传递给 AuthenticationManagerResolver
,它选择了 AuthenticationManager
。BearerTokenAuthenticationToken
被传入 AuthenticationManager
以进行认证。AuthenticationManager
的细节取决于你配置的是 JWT 还是 opaque token。
如果认证失败,那么 Failure。
-
AuthenticationEntryPoint
被调用以触发WWW-Authenticate
头的再次发送。
如果认证成功,则 Success。
-
The Authentication 被设置在 SecurityContextHolder 上。
-
BearerTokenAuthenticationFilter
调用FilterChain.doFilter(request,response)
来继续执行其余的应用逻辑。