对于最新的稳定版本,请使用 Spring Security 7.0.4spring-doc.cadn.net.cn

OAuth 2.0 资源服务器

Spring Security 支持使用两种形式的 OAuth 2.0 Bearer Token 来保护端点:spring-doc.cadn.net.cn

这在应用程序将其权限管理委托给授权服务器(例如 Okta 或 Ping Identity)的情况下非常有用。 资源服务器可以向该授权服务器查询以对请求进行授权。spring-doc.cadn.net.cn

本节详细介绍了 Spring Security 如何提供对 OAuth 2.0 Bearer Token 的支持。spring-doc.cadn.net.cn

现在我们可以探讨 Bearer Token 认证在 Spring Security 中的工作原理。 首先,我们注意到,与基本认证(Basic Authentication)一样,WWW-Authenticate 响应头会被发送给未经认证的客户端:spring-doc.cadn.net.cn

bearerauthenticationentrypoint
图1. 发送 WWW-Authenticate 头

上图基于我们的 SecurityFilterChain 图表构建。spring-doc.cadn.net.cn

number 1首先,用户向/private用户无权访问的资源。spring-doc.cadn.net.cn

number 2Spring Security 的AuthorizationFilter表示未认证的请求是拒绝访问通过抛出AccessDeniedException.spring-doc.cadn.net.cn

number 3由于用户未通过身份验证,ExceptionTranslationFilter启动开始身份验证. 已配置的AuthenticationEntryPointBearerTokenAuthenticationEntryPoint,它发送一个WWW-Authenticate头部。 TheRequestCache通常是NullRequestCache由于客户端能够重放其最初请求的请求,因此不会保存该请求。spring-doc.cadn.net.cn

当客户端收到 WWW-Authenticate: Bearer 响应头时,它就知道应该使用 Bearer Token 重试请求。 下图展示了 Bearer Token 的处理流程:spring-doc.cadn.net.cn

bearertokenauthenticationfilter
图2. Bearer Token 认证

该图基于我们的 SecurityFilterChain 图表构建。spring-doc.cadn.net.cn

number 1当用户提交其承载Tokens时,BearerTokenAuthenticationFilter创建BearerTokenAuthenticationToken这是一种Authentication通过从HttpServletRequest.spring-doc.cadn.net.cn

number 2接下来,HttpServletRequest被传递给AuthenticationManagerResolver,它选择AuthenticationManager。TheBearerTokenAuthenticationToken被传递到AuthenticationManager需要身份验证。 详细信息如下AuthenticationManager看起来取决于您是否已配置为jwt or 不透明Tokens.spring-doc.cadn.net.cn

number 3如果身份验证失败,则失败spring-doc.cadn.net.cn

number 4如果认证成功,则成功.spring-doc.cadn.net.cn