如何解决如何在 Spring Boot 中使用 WebClient 配置 OAuthClient2Password
我需要使用 OAuth2Password 通过资源所有者用户名和密码连接到其他服务。我已经配置了 webclient 和 client 注册如下:
@豆 WebClient webClient(ReactiveClientRegistrationRepository clientRegistrations) {
TcpClient tcpClient = TcpClient.create().option(ChannelOption.CONNECT_TIMEOUT_MILLIS,10000)
.doOnConnected(connection -> {
connection.addHandlerLast(new ReadTimeoutHandler(10000,TimeUnit.MILLISECONDS));
connection.addHandlerLast(new WriteTimeoutHandler(10000,TimeUnit.MILLISECONDS));
});
InMemoryReactiveOAuth2AuthorizedClientService authClientService = new InMemoryReactiveOAuth2AuthorizedClientService(
clientRegistrations);
ServerOAuth2AuthorizedClientExchangeFilterFunction oauth = new ServerOAuth2AuthorizedClientExchangeFilterFunction(
new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager(clientRegistrations,authClientService));
return WebClient.builder().clientConnector(new ReactorClientHttpConnector(HttpClient.from(tcpClient)))
.filter(oauth).build();
}
public ReactiveClientRegistrationRepository clientRegistrationRepository() {
Map<String,Object > map = new HashMap<>();
map.put(OAuth2AuthorizationContext.USERNAME_ATTRIBUTE_NAME,USERNAME);
map.put(OAuth2AuthorizationContext.PASSWORD_ATTRIBUTE_NAME,PASSWORD);
ClientRegistration clientRegistration;
clientRegistration = ClientRegistration.withRegistrationId("configured")
.authorizationGrantType(AuthorizationGrantType.PASSWORD).clientId(CLIENTID)
.clientSecret(CLIENTSECRET).
.providerConfigurationMetadata(map).userInfoAuthenticationMethod(AuthenticationMethod.FORM)
.tokenUri(tokenURL).build();
;
return new InMemoryReactiveClientRegistrationRepository(clientRegistration);
}
webclient
.get().
.url(......)
.attributes(ServerOAuth2AuthorizedClientExchangeFilterFunction.clientRegistrationId("configured"))
.retrieve().bodytoMono(String.class);
我总是收到 401 Unauthorized 错误,而且我没有收到任何令牌。
你能帮我知道我是否配置错误吗?
问候, 斯蒂芬
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。