首页 > 解决方案 > 带有 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

如何解决这个问题?

标签: javaspring-bootoauth-2.0spring-webfluxspring-webclient

解决方案


推荐阅读