|
此版本仍在开发中,尚未被视为稳定版本。如需最新稳定版本,请使用 Spring Security 7.0.4! |
HTTP 服务客户端集成
Spring Security 的 OAuth 支持可以与 RestClient 和 WebClient HTTP 服务客户端 集成。
配置
在针对 RestClient 或 WebClient 进行特定配置后,使用 HTTP 服务客户端集成 只需在需要 OAuth 的方法或其声明的 HTTP 接口中添加一个 @ClientRegistrationId。
由于 @ClientRegistrationId 的存在决定了 OAuth Tokens是否以及如何被解析,因此可以安全地将 Spring Security 的 OAuth 支持添加到任何配置中。
RestClient 配置
Spring Security 的 OAuth 支持可以集成由 RestClient 支持的 HTTP 服务客户端。
第一步是 创建一个 OAuthAuthorizedClientManager Bean。
接下来,您必须配置 HttpServiceProxyFactory 和 RestClient,使其能够识别 @ClientRegistrationId
为简化此配置,请使用 OAuth2RestClientHttpServiceGroupConfigurer。
-
Java
-
Kotlin
@Bean
OAuth2RestClientHttpServiceGroupConfigurer securityConfigurer(
OAuth2AuthorizedClientManager manager) {
return OAuth2RestClientHttpServiceGroupConfigurer.from(manager);
}
@Bean
fun securityConfigurer(manager: OAuth2AuthorizedClientManager): OAuth2RestClientHttpServiceGroupConfigurer {
return OAuth2RestClientHttpServiceGroupConfigurer.from(manager)
}
配置:
-
将
OAuth2ClientHttpRequestInterceptor添加到RestClient
WebClient 配置
Spring Security 的 OAuth 支持可以集成由 WebClient 支持的 HTTP 服务客户端。
第一步是 创建一个 ReactiveOAuthAuthorizedClientManager Bean。
接下来,您必须配置 HttpServiceProxyFactory 和 WebRestClient,使其能够识别 @ClientRegistrationId
为简化此配置,请使用 OAuth2WebClientHttpServiceGroupConfigurer。
-
Java
-
Kotlin
@Bean
OAuth2WebClientHttpServiceGroupConfigurer securityConfigurer(
ReactiveOAuth2AuthorizedClientManager manager) {
return OAuth2WebClientHttpServiceGroupConfigurer.from(manager);
}
@Bean
fun securityConfigurer(
manager: ReactiveOAuth2AuthorizedClientManager?
): OAuth2WebClientHttpServiceGroupConfigurer {
return OAuth2WebClientHttpServiceGroupConfigurer.from(requireNotNull(manager))
}
配置:
@ClientRegistrationId
您可以在 HTTP 服务上添加 ClientRegistrationId 以指定使用哪个 ClientRegistration。
-
Java
-
Kotlin
@GetExchange("/user")
@ClientRegistrationId("github")
User getAuthenticatedUser();
@GetExchange("/user")
@ClientRegistrationId("github")
fun getAuthenticatedUser() : User
类型级声明
@ClientRegistrationId 也可以添加在类型级别,以避免在每个方法上重复声明。
-
Java
-
Kotlin
@HttpExchange
@ClientRegistrationId("github")
public interface UserService {
@GetExchange("/user")
User getAuthenticatedUser();
@GetExchange("/users/{username}/hovercard")
Hovercard getHovercard(@PathVariable String username);
}
@HttpExchange
@ClientRegistrationId("github")
interface UserService {
@GetExchange("/user")
fun getAuthenticatedUser(): User
@GetExchange("/users/{username}/hovercard")
fun getHovercard(@PathVariable username: String): Hovercard
}
ClientRegistrationIdProcessor
配置的 配置 ClientRegistrationIdProcessor 将:
-
为每个
@ClientRegistrationId自动调用ClientAttributes.clientRegistrationId(String)。 -
这将把
ClientRegistration.getId()添加到属性中
然后由以下内容处理 id:
-
OAuth2ClientHttpRequestInterceptor用于 RestClient 集成 -
ServletOAuth2AuthorizedClientExchangeFilterFunction(servlets)或ServerOAuth2AuthorizedClientExchangeFilterFunction(响应式环境),用于WebClient。