spring-security 如何将OAuth 2.0不记名令牌添加到WebClient

azpvetkf  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(155)

这是我当前使用WebClient时得到的错误响应

{
  "type": "https://www.jhipster.tech/problem/problem-with-message",
  "title": "Internal Server Error",
  "status": 500,
  "detail": "401 Unauthorized from GET http://localhost:8080/services/user/api/users/1",
  "path": "/api/posts",
  "message": "error.http.500"
}

这就是我使用WebClient的方式

webclient.get().uri(ur).retrieve().bodyToMono(User.class).block();
pbgvytdp

pbgvytdp1#

我假设您有一个基于servlet的应用程序,因为您订阅了Mono并阻塞了它。
第一步是使用OAuth 2.0客户端支持配置WebClient

@Bean
WebClient webClient(OAuth2AuthorizedClientManager authorizedClientManager) {
    ServletOAuth2AuthorizedClientExchangeFilterFunction oauth2Client =
            new ServletOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager);
    return WebClient.builder()
            .apply(oauth2Client.oauth2Configuration())
            .build();
}

然后,您可以将OAuth2AuthorizedClient设置为请求属性:

String body = this.webClient
        .get()
        .attributes(clientRegistrationId("client-id"))
        .retrieve()
        .bodyToMono(String.class)
        .block();

您可以在Spring Security参考文档中找到更多详细信息。
您可以在Spring Security samples GitHub repository中找到完整的示例。

相关问题