首页 > 解决方案 > Spring Boot oauth2 配置中的多个客户端凭据-动态使用

问题描述

我在 Spring Boot 中的应用程序使用 oauth2 连接到另一个休息服务。我想为其他客户添加新凭据。

目前,我的配置如下所示:

    @Bean
ReactiveClientRegistrationRepository getRegistration(
        @Value("${spring.security.oauth2.client.provider.my-client1.token-uri:https://token.url/token}") String tokenUri,
        @Value("${spring.security.oauth2.client.registration.my-client1.client-id:werwewewewf}") String clientId,
        @Value("${spring.security.oauth2.client.registration.my-client1.client-secret:erwerwerwerwe}") String clientSecret,
        @Value("${spring.security.oauth2.client.registration.my-client1.scopes:openid}") String scope
) {
    ClientRegistration registration = ClientRegistration
            .withRegistrationId("my-client1")
            .tokenUri(tokenUri)
            .clientId(clientId)
            .clientSecret(clientSecret)
            .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
            .scope(scope)
            .build();
    return new InMemoryReactiveClientRegistrationRepository(registration);
}

我可以看到 InMemoryReactiveClientRegistrationRepository 可以接受多个 ClientRegistration。我的猜测是我可以通过这种方式添加多个客户端。

但是,我想在应用程序运行时动态使用它们。目前我可以为每个 WebClient bean 设置一个客户端:

    @Bean(name = "my-webclient")
public WebClient webClient(@Qualifier("getRegistration") ReactiveClientRegistrationRepository clientRegistrations) {
    ServerOAuth2AuthorizedClientExchangeFilterFunction oauth = new ServerOAuth2AuthorizedClientExchangeFilterFunction(
            clientRegistrations, new UnAuthenticatedServerOAuth2AuthorizedClientRepository());
    oauth.setDefaultClientRegistrationId("my-client1");
    return WebClient.builder()
            .filter(oauth)
            .build();
}

我想验证每个客户端请求它是什么类型的客户端,并为此客户端使用适当的 oauth2 凭据。有什么好的方法可以实现这一目标吗?

标签: javaspringspring-bootspring-security-oauth2

解决方案


推荐阅读