Java Spring WebClient和客户端\u凭据授予

Java Spring WebClient和客户端\u凭据授予,java,spring,spring-security,spring-security-oauth2,Java,Spring,Spring Security,Spring Security Oauth2,我的问题是针对spring security 5.1.0和使用spring WebClient提出的。我在使用SpringBoot2.1.0的服务器环境中工作。这可能已经被问到了,但当时无法回答 通读spring安全性,他们似乎增加了对客户端凭据身份验证流的支持,特别是将其添加到WebClient Bean中,这样最终用户就不必担心身份验证令牌。我正试图做到这一点,但API/文档让我完全迷失了方向。我目前的工作如下 private ClientRegistration clientRegistr

我的问题是针对spring security 5.1.0和使用spring WebClient提出的。我在使用SpringBoot2.1.0的服务器环境中工作。这可能已经被问到了,但当时无法回答

通读spring安全性,他们似乎增加了对客户端凭据身份验证流的支持,特别是将其添加到WebClient Bean中,这样最终用户就不必担心身份验证令牌。我正试图做到这一点,但API/文档让我完全迷失了方向。我目前的工作如下

private ClientRegistration clientRegistration() {
    return ClientRegistration.withRegistrationId("registration-id")
        .clientId("client-id")
        .clientSecret("secret")
        .tokenUri("token-url")
        .clientAuthenticationMethod(ClientAuthenticationMethod.BASIC)
        .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
        .scope("scopes")
        .build();
}

@Bean
public WebClient webClient() {
    ClientRegistrationRepository clientRegistrationRepository = new InMemoryClientRegistrationRepository(this.clientRegistration());
    OAuth2AuthorizedClientService oAuth2AuthorizedClientService = new InMemoryOAuth2AuthorizedClientService(clientRegistrationRepository);
# These are unused ^ but pieces of documentation seem to indicate they are required

    return WebClient.builder()
        .filter(new ServerOAuth2AuthorizedClientExchangeFilterFunction()) # this requires 2 arguments that I do not have
        .build();
}

我的最终目标是能够在任何地方自动连接WebClient bean,只需发出自动添加承载身份验证的请求。

随着Spring Security 5.1为OAuth2身份验证机制添加了更简单的实现,我建议您看看这篇最近的文章:

从现在起,您不需要管理任何
ClientRegistration
。可以使用属性设置所有内容

然后,对于WebClient实例关联,需要从Spring注入
ClientRegistrationRepository
,并且您需要使用未经身份验证的服务器OAuth2AuthorizedClient的新实例,因为您没有将任何用户附加到应用程序进程。这样,您将获得
服务器OAuth2AuthorizedClient ChangeFilterFunction
所需的两个参数

我尝试将客户端应用程序在GitHUb repo中使用WebClient从OAuth2安全端点上的资源服务器请求数据的场景设置为:。使用SpringSecurity5.1,身份验证机制现在变得非常简单


如果你有任何问题,请询问。希望这对你有帮助

我试图做一些类似于您的应用程序github的事情,但是使用了一个spring boot web应用程序,该应用程序需要使用客户端\u credentails进行远程OAuth2 WebClient调用,但从未成功。最终总是从DefaultServerOAuth2AuthorizationRequestResolver获取“无效的授权授予类型(客户端凭据)”:(请问您是否有任何带有代码的GitHub repo,我可以查看一下?@FlorentGornes:我的web客户端有问题,它在调用资源服务器之前为每个请求获取一个访问令牌。您已经测试过了吗?