小编Tim*_*dit的帖子

使用 ClientRegistrationId 作为请求属性的 WebClient(使用 OAuth 2.0)

我正在寻找一个工作示例,当我将请求属性添加到 WebClient 时,我可以在其中设置 ClientRegistrationId。spring.io 提供的示例对我不起作用(docs.spring.io (5.2.12))。

当我尝试这个示例时(使用默认的 ClientRegistrationId):

@Bean
WebClient webClient(ReactiveClientRegistrationRepository clientRegistrations,
        ServerOAuth2AuthorizedClientRepository authorizedClients) {
    ServerOAuth2AuthorizedClientExchangeFilterFunction oauth =
            new ServerOAuth2AuthorizedClientExchangeFilterFunction(clientRegistrations, authorizedClients);
    // (optional) explicitly opt into using the oauth2Login to provide an access token implicitly
    // oauth.setDefaultOAuth2AuthorizedClient(true);
    // (optional) set a default ClientRegistration.registrationId
    oauth.setDefaultClientRegistrationId("MyClRegId");
    return WebClient.builder()
            .filter(oauth)
            .build();
}
Run Code Online (Sandbox Code Playgroud)

调用端点:

ResponseSpec responseSpec = this.webClient.get().uri("/NumberOrders").retrieve();
Run Code Online (Sandbox Code Playgroud)

应用.属性:

spring.security.oauth2.client.registration.MyClRegId.authorization-grant-type=client_credentials
spring.security.oauth2.client.registration.MyClRegId.client-id=myteam
spring.security.oauth2.client.registration.MyClRegId.client-secret=12349875
spring.security.oauth2.client.provider.MyClRegId.token-uri=https://something/token
spring.security.oauth2.client.registration.MyClRegId.scope=OIDC
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

引起原因:java.lang.IllegalArgumentException:serverWebExchange 不能为 null

如果我尝试将 ClientRegistrationId 设置为请求属性,相应的 spring.io 示例(docs.spring.io (5.2.12))会发生另一个错误(方法 clientRegistrationId(String) 未定义...):

ResponseSpec responseSpec = this.webClient …
Run Code Online (Sandbox Code Playgroud)

java rest webclient oauth-2.0 spring-boot

4
推荐指数
1
解决办法
3262
查看次数

标签 统计

java ×1

oauth-2.0 ×1

rest ×1

spring-boot ×1

webclient ×1