spring-boot - 增加 OAuth 客户端
问题描述
我目前在我的应用程序中仅使用一个 OAuth 客户端 ID。令牌将通过 WebClient 发布请求使用。
spring.security.oauth2.client.registration.ec.client-id=xxx
spring.security.oauth2.client.registration.ec.client-secret=xxx
spring.security.oauth2.client.registration.ec.scope=xx
spring.security.oauth2.client.registration.ec.authorization-grant-type=client_credentials
spring.security.oauth2.client.provider.ec.token-uri=https://xxx
配置:
@Autowired
public ClientRegistrationRepository clientRegistrationRepository;
@Bean
public WebClient webClient(ClientRegistrationRepository clientRegistrationRepository, OAuth2AuthorizedClientService authorizedClientService) {
AuthorizedClientServiceOAuth2AuthorizedClientManager manager = new AuthorizedClientServiceOAuth2AuthorizedClientManager(clientRegistrationRepository, authorizedClientService);
manager.setAuthorizedClientProvider(new DelegatingOAuth2AuthorizedClientProvider(
new RefreshTokenOAuth2AuthorizedClientProvider(),
new ClientCredentialsOAuth2AuthorizedClientProvider()));
ServletOAuth2AuthorizedClientExchangeFilterFunction oauth2 = new ServletOAuth2AuthorizedClientExchangeFilterFunction(manager);
oauth2.setDefaultClientRegistrationId("ec");
return WebClient.builder()
.filter(oauth2)
//.filter(logRequest())
.filter(handleResponseError())
.apply(oauth2.oauth2Configuration())
.build();
}
现在我需要添加另一个使用相同令牌 uri 和授权类型的 OAuth 客户端 ID。像这样的……</p>
spring.security.oauth2.client.registration.ec1.client-id=xxx1
spring.security.oauth2.client.registration.ec1.client-secret=xxx1
spring.security.oauth2.client.registration.ec1.scope=xxx1
如何修改配置以支持多个 OAuth 客户端,以便为每个 WebClient 提供必要的客户端 ID?
谢谢
解决方案
一种解决方案是如下使用:
@Override
public void configure(ClientDetailsServiceConfigurer clientDetails) throws Exception {
clientDetails.inMemory()
.withClient("clinetOne")
.secret("secretOne")
.scopes("scope")
.authorizedGrantTypes("GrantType")
.and()
.withClient("clientTwo")
.secret("secretTwo")
.scopes("scope")
.authorizedGrantTypes("GrantType");
}
推荐阅读
- python - 在 Windows 中使用 python3 时,如果不按回车就不可能从屏幕上输入单个字符,这仍然是真的吗?
- java - 即使能够从 cmd 的“adb devices”中获取 udid,Appium Server 也无法检测到连接的设备
- ruby-on-rails - 设计确认后发送欢迎电子邮件
- html - 使用列宽和内联块的最少两行
- java - 管理 JMS 消息到多个服务器的传递
- python - Python:如何在指定日期和时间之后遍历一组文件和grep日志
- html - HTML 区别 .jpg .JPG
- spring - 无法使用带有 QueryDSL 和 Web 支持的 Spring Data Repository 查询 Set 中的字段
- serialization - PyGtk 序列化
- c# - 如何将 ContentControl 转换为 PlainTextContentControl/访问 .Text 属性?