我正在构建一个应用程序,该应用程序必须与使用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过滤器。
任何帮助都将不胜感激,因为我已经来回两天了。
1条答案
按热度按时间kjthegm61#
最后,我的解决方案是重新移植oauth2exchangefilterfunction并实现我自己的customwebclientcredentialstokenresponseclient
在customwebclientcredentialstokenresponseclient中,我添加了提供程序所需的自定义标头,并在方法createdefaultauthorizedclientmanager()中创建了我创建的customwebclientcredentialstokenresponseclient的示例。