此版本仍在开发中,尚未被视为稳定版本。如需最新稳定版本,请使用 Spring Security 7.0.4spring-doc.cadn.net.cn

HTTP 服务客户端集成

Spring Security 的 OAuth 支持可以与 RestClientWebClient HTTP 服务客户端 集成。spring-doc.cadn.net.cn

配置

在针对 RestClientWebClient 进行特定配置后,使用 HTTP 服务客户端集成 只需在需要 OAuth 的方法或其声明的 HTTP 接口中添加一个 @ClientRegistrationIdspring-doc.cadn.net.cn

由于 @ClientRegistrationId 的存在决定了 OAuth Tokens是否以及如何被解析,因此可以安全地将 Spring Security 的 OAuth 支持添加到任何配置中。spring-doc.cadn.net.cn

RestClient 配置

Spring Security 的 OAuth 支持可以集成由 RestClient 支持的 HTTP 服务客户端。 第一步是 创建一个 OAuthAuthorizedClientManager Beanspring-doc.cadn.net.cn

接下来,您必须配置 HttpServiceProxyFactoryRestClient,使其能够识别 @ClientRegistrationId 为简化此配置,请使用 OAuth2RestClientHttpServiceGroupConfigurerspring-doc.cadn.net.cn

@Bean
OAuth2RestClientHttpServiceGroupConfigurer securityConfigurer(
		OAuth2AuthorizedClientManager manager) {
	return OAuth2RestClientHttpServiceGroupConfigurer.from(manager);
}
@Bean
fun securityConfigurer(manager: OAuth2AuthorizedClientManager): OAuth2RestClientHttpServiceGroupConfigurer {
    return OAuth2RestClientHttpServiceGroupConfigurer.from(manager)
}

WebClient 配置

Spring Security 的 OAuth 支持可以集成由 WebClient 支持的 HTTP 服务客户端。 第一步是 创建一个 ReactiveOAuthAuthorizedClientManager Beanspring-doc.cadn.net.cn

接下来,您必须配置 HttpServiceProxyFactoryWebRestClient,使其能够识别 @ClientRegistrationId 为简化此配置,请使用 OAuth2WebClientHttpServiceGroupConfigurerspring-doc.cadn.net.cn

@Bean
OAuth2WebClientHttpServiceGroupConfigurer securityConfigurer(
		ReactiveOAuth2AuthorizedClientManager manager) {
	return OAuth2WebClientHttpServiceGroupConfigurer.from(manager);
}
@Bean
fun securityConfigurer(
    manager: ReactiveOAuth2AuthorizedClientManager?
): OAuth2WebClientHttpServiceGroupConfigurer {
    return OAuth2WebClientHttpServiceGroupConfigurer.from(manager)
}

@ClientRegistrationId

您可以在 HTTP 服务上添加 ClientRegistrationId 以指定使用哪个 ClientRegistrationspring-doc.cadn.net.cn

	@GetExchange("/user")
	@ClientRegistrationId("github")
	User getAuthenticatedUser();
    @GetExchange("/user")
    @ClientRegistrationId("github")
    fun getAuthenticatedUser() : User

类型级声明

@ClientRegistrationId 也可以添加在类型级别,以避免在每个方法上重复声明。spring-doc.cadn.net.cn

@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
}