java - 带有 OAuth2 的 Spring WebClient 不存储访问令牌
问题描述
我的 Spring Boot 应用程序中有 WebClient,它通过 OAuth2 连接到外部服务,它的配置如下所示:
@Configuration
@RequiredArgsConstructor
public class OAuth2ClientConfiguration {
private final OAuth2ClientProperties properties;
@Bean
ReactiveClientRegistrationRepository clientRegistration() {
ClientRegistration registration = ClientRegistration
.withRegistrationId(properties.getClientRegistrationId())
.tokenUri(properties.getTokenUri())
.clientId(properties.getClientId())
.clientSecret(properties.getClientSecret())
.authorizationGrantType(new AuthorizationGrantType(properties.getAuthorizationGrantType()))
.build();
return new InMemoryReactiveClientRegistrationRepository(registration);
}
@Bean
WebClient webClient(ReactiveClientRegistrationRepository clientRegistration) {
var clientService = new InMemoryReactiveOAuth2AuthorizedClientService(clientRegistration);
var authorizedClientManager = new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager(clientRegistration, clientService);
var oauth = new ServerOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager);
oauth.setDefaultClientRegistrationId(properties.getClientRegistrationId());
return WebClient.builder()
.filter(oauth)
.build();
}
}
这是一个访问令牌:
{
"access_token": "some_generated_access_token",
"token_type": "bearer",
"expires_in": 82822,
"scope": "api",
"jti": "6e1a8d7c-3909-4acf-9168-cf912fcd0c8a"
}
它正在工作,一切正常,但是......它在获取访问令牌后没有存储访问令牌,每次调用它时都会获取新的访问令牌。我在启动集成测试和验证授权服务器调用时发现了这一点。但是在上面显示的配置中,它应该存储在内存中。
我在互联网上发现这种问题可能发生在 SpringBoot 版本高达 2.2.3 和“org.springframework.security:spring-security-oauth2-client:5.2.1.RELEASE”
但我使用的是最新版本的 Spring Boot 2.4.9,它使用 org.springframework.security:spring-security-oauth2-client:5.4.7
如何解决这个问题?
解决方案
推荐阅读
- bash - 带有if语句加上变量结果的while循环
- javascript - 在反应网站中存储多语言文本的最佳实践是什么
- node.js - socket.io 广播不适用于 React
- woocommerce - 如何使用 WooCommerce 中的 WooCommerce 订阅将价格添加到“订阅”按钮?
- c# - LINQ 选择中的 C# 子查询
- xcode - 更改文本字段的禁用状态时获取`AttributeGraph:检测到循环`错误
- reduction - 多值模型检查(约简法)
- visual-studio - MSbuild 命令行为 Nuget 包引发错误,Visual Studio 不会
- java - Spring jpa 实体字段列表
到 postgre 数组归档不工作 - excel - VBA不处理宏中的.Body Line(或HTMLBody)