我的问题仅针对 spring-security 5.1.0 和使用Spring WebClient。我正在使用Spring Boot 2.1.0在服务器环境中工作。这个question可能已经被问到了,但当时无法回答。
通读spring-security 5.1.0 release notes,似乎他们已经添加了对client_credentials身份验证流的支持,特别是将其添加到WebClient Bean中,因此最终用户不必担心auth令牌。我正试图做到这一点,但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,并简单地发出自动添加了 bearer 身份验证的请求。
答案 0 :(得分:1)
随着Spring Security 5.1为OAuth2身份验证机制添加了更简单的实现,我建议您看一下最近的这篇文章:StackOverflow - Spring Security 5.1 - Get token for client credentials flow with WebClient。
从现在开始,您不需要管理任何ClientRegistration
。可以使用属性设置所有内容。
然后,对于WebClient实例化,需要从Spring注入ClientRegistrationRepository
,并且您需要使用UnAuthenticatedServerOAuth2AuthorizedClientRepository
的新实例,因为您没有将任何用户附加到应用程序进程中。这样,您将拥有ServerOAuth2AuthorizedClientExchangeFilterFunction
所需的两个参数。
我试图提出一种方案,其中客户端应用程序正在GitHUb存储库GitHub - Spring Security OAuth2 Machine-To-Machine process中使用WebClient从OAuth2安全端点上的资源服务器请求数据。现在,使用Spring Security 5.1确实很容易进行身份验证。
请问您是否有任何疑问。希望对您有帮助!