UnAuthenticatedServerOAuth2AuthorizedClientRepository的替代产品 [英] Replacement for UnAuthenticatedServerOAuth2AuthorizedClientRepository

查看:11
本文介绍了UnAuthenticatedServerOAuth2AuthorizedClientRepository的替代产品的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们正在使用Spring安全OAuth2通过客户端凭据授予类型获取令牌。我们没有使用Applation.Properties文件来指定客户端凭据,而是以编程方式提供它们。

    ClientRegistration clientRegistration = ClientRegistration
            .withRegistrationId("test")
            .clientId("testclientid")
            .clientSecret("testclientsecret")
            .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
            .tokenUri("http://test.tokenuri.com")
            .build();

    ReactiveClientRegistrationRepository reactiveClientRegistrationRepository = new InMemoryReactiveClientRegistrationRepository(clientRegistration);    
           ServerOAuth2AuthorizedClientExchangeFilterFunction oauth =
            new ServerOAuth2AuthorizedClientExchangeFilterFunction(
                    reactiveClientRegistrationRepository,
                    new UnAuthenticatedServerOAuth2AuthorizedClientRepository());
    oauth.setDefaultClientRegistrationId("test");

    this.webClient = webClientFactory.getBuilder()
            .filter(oauth)
            .build();

代码运行正常,但我们看到一条警告,指出UnAuthenticatedServerOAuth2AuthorizedClientRepository已弃用。 UnAuthenticatedServerOAuth2AuthorizedClientRepository接口文档建议使用AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager,但AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager没有实现与UnAuthenticatedServerOAuth2AuthorizedClientRepository.相同的接口在这种情况下,替换已弃用的UnAuthenticatedServerOAuth2AuthorizedClientRepository的建议是什么?

我找到https://github.com/spring-projects/spring-security/issues/8016,但问题没有提供太多详细信息。

推荐答案

在@Jokers Answer的帮助下,我设法通过以下方式解决了这个问题。我将凭据放在appliction.properties中并为其分离了RegistrationRepository。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.client.AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager;
import org.springframework.security.oauth2.client.InMemoryReactiveOAuth2AuthorizedClientService;
import org.springframework.security.oauth2.client.registration.ClientRegistration;
import org.springframework.security.oauth2.client.registration.InMemoryReactiveClientRegistrationRepository;
import org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository;
import org.springframework.security.oauth2.client.web.reactive.function.client.ServerOAuth2AuthorizedClientExchangeFilterFunction;
import org.springframework.security.oauth2.core.AuthorizationGrantType;
import org.springframework.web.reactive.function.client.WebClient;

@Configuration
public class MyClientRequestConfig {

    @Bean
    ReactiveClientRegistrationRepository getRegistration(
            @Value("${spring.security.oauth2.client.provider.myprovider.token-uri}") String token_uri,
            @Value("${spring.security.oauth2.client.registration.myprovider.client-id}") String client_id,
            @Value("${spring.security.oauth2.client.registration.myprovider.client-secret}") String client_secret
    ) {
        ClientRegistration registration = ClientRegistration
                .withRegistrationId("myprovider")
                .tokenUri(token_uri)
                .clientId(client_id)
                .clientSecret(client_secret)
                .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
                .build();
        return new InMemoryReactiveClientRegistrationRepository(registration);
    }

    @Bean(name = "myprovider")
    WebClient webClient(ReactiveClientRegistrationRepository clientRegistrations) {
        InMemoryReactiveOAuth2AuthorizedClientService clientService = new InMemoryReactiveOAuth2AuthorizedClientService(clientRegistrations);
        AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager authorizedClientManager = new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager(clientRegistrations, clientService);
        ServerOAuth2AuthorizedClientExchangeFilterFunction oauth = new ServerOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager);
        oauth.setDefaultClientRegistrationId("myprovider");
        return WebClient.builder()
                .filter(oauth)
                .build();

    }
}

这篇关于UnAuthenticatedServerOAuth2AuthorizedClientRepository的替代产品的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆