gpt4 book ai didi

spring-boot - 如何像 RestTemplate 一样从 WebClient 获取 accesstoken?

转载 作者:行者123 更新时间:2023-12-02 18:35:55 45 4
gpt4 key购买 nike

我正在从 Spring Security Oauth 2.x 迁移到 Spring security 5.2,并遇到了以下阻止程序。正如我所看到的,OAuth2RestTemplate 不再使用,而是推荐使用 WebClient。所以我对我的代码库进行了更改以使网络客户端正常工作。

在 Oauth2 中,我们可以选择使用 oAuth2RestTemplate.getAccessToken() 直接从 RestTemplate 获取 token ,我在 WebClient 中找不到类似的内容。这是调用外部微服务。是否有任何选项可以从网络客户端获取 accesstoken?或者那里以不同的方式处理?

最佳答案

像往常一样,在使用 Spring Security 时,很多事情都会按照约定自动进行配置。意思是:你应该熟悉oauth相关的spring security配置。

spring security docu 是您学习的一个良好起点。或者关于这个主题的许多优秀 Baeldung 文章之一(也许这篇文章有帮助: https://www.baeldung.com/spring-oauth-login-webflux )。

完成正确的配置后,以下方法将创建一个 WebClient,它在过滤器方法中根据需要自动创建正确的 oauth token 。

在本例中,ReactiveOAuth2AuthorizedClientManager 类型的 Bean 负责处理此问题。该 bean 是在 list 中创建的。 2.

此外,您还需要配置 oauth 服务器 URL 和凭据。请参阅 list 3 的简单示例。

此示例无需您处理访问 token 即可运行。


@Bean
public WebClient oauthWebClient(
final WebClient.Builder webClientBuilder,
@Qualifier("authorizedClientManager") final ReactiveOAuth2AuthorizedClientManager manager) {
final ExchangeStrategies exchangeStrategies =
ExchangeStrategies.builder()
.codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(EXCHANGE_BYTE_COUNT))
.build();
final ServerOAuth2AuthorizedClientExchangeFilterFunction oauth = new ServerOAuth2AuthorizedClientExchangeFilterFunction(manager);
oauth.setDefaultClientRegistrationId(authenticationProperties.getClientId());
// set more properties if needed
// oauth.set ...

return webClientBuilder
.exchangeStrategies(exchangeStrategies)
.baseUrl(apiProperties.getBaseUrl())
.filter(oauth)
.build();
}

list 1:创建一个 WebClient bean

    @Bean
public ReactiveOAuth2AuthorizedClientManager authorizedClientManager(
final ReactiveClientRegistrationRepository clientRegistrationRepository,
final ReactiveOAuth2AuthorizedClientService authorizedClientService) {
final ReactiveOAuth2AuthorizedClientProvider authorizedClientProvider =
ReactiveOAuth2AuthorizedClientProviderBuilder
.builder()
.clientCredentials()
.build();
final AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager authorizedClientManager =
new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager(clientRegistrationRepository, authorizedClientService);
authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider);
return authorizedClientManager;
}

list 2:创建 OAuth2 授权客户端管理器 Bean

spring:
security:
oauth2:
resourceserver:
jwt:
issuer-uri: https://your-oauth-server.com/auth/realms/your-realm
client:
provider:
your-provider:
issuer-uri: https://your-oauth-server.com/auth/realms/your-realm
registration:
your-provider:
client-id: your-client-id
client-secret: ${your_client_secret} # from an environment variable
scope: openid
authorization-grant-type: client_credentials

list 3:配置 Spring Web 客户端的多种可能方法之一

关于spring-boot - 如何像 RestTemplate 一样从 WebClient 获取 accesstoken?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68788841/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com