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)来继续执行其余的应用逻辑。