SpringWebClient

alen0pnh  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(291)

我正在构建一个应用程序,该应用程序必须与使用oauth2和grant-type-client\u凭据进行安全保护的rest服务通信,关键是/oauth/token端点需要一个自定义头,为了简化,我们称之为“自定义头”。我的问题是文档中没有关于如何实现这一点的示例或跟踪。
我的代码如下

ClientRegistration client = ClientRegistration
                .withRegistrationId(authUser)
                .tokenUri(authUrl)
                .clientId(authUser)
                .clientSecret(authPassword)
                .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
                .scope(authScope)
                .build();

ReactiveClientRegistrationRepository clientRegistrations =
        new InMemoryReactiveClientRegistrationRepository(client);

ServerOAuth2AuthorizedClientExchangeFilterFunction oauthFilter =
        new ServerOAuth2AuthorizedClientExchangeFilterFunction(
                clientRegistrations,
                new UnAuthenticatedServerOAuth2AuthorizedClientRepository());
oauthFilter.setDefaultClientRegistrationId(authUser);

this.webClient = WebClient.builder()
        .filter(oauthFilter)
        .defaultHeaders(httpHeaders -> {
            httpHeaders.add(CUSTOM_HEADER, customHeader);;
        })
        .build();

如您所见,我正在webclient中设置custome头,但是它没有到达oauth过滤器。
任何帮助都将不胜感激,因为我已经来回两天了。

kjthegm6

kjthegm61#

最后,我的解决方案是重新移植oauth2exchangefilterfunction并实现我自己的customwebclientcredentialstokenresponseclient
在customwebclientcredentialstokenresponseclient中,我添加了提供程序所需的自定义标头,并在方法createdefaultauthorizedclientmanager()中创建了我创建的customwebclientcredentialstokenresponseclient的示例。

相关问题