java - Spring Boot oauth2 配置中的多个客户端凭据-动态使用
问题描述
我在 Spring Boot 中的应用程序使用 oauth2 连接到另一个休息服务。我想为其他客户添加新凭据。
目前,我的配置如下所示:
@Bean
ReactiveClientRegistrationRepository getRegistration(
@Value("${spring.security.oauth2.client.provider.my-client1.token-uri:https://token.url/token}") String tokenUri,
@Value("${spring.security.oauth2.client.registration.my-client1.client-id:werwewewewf}") String clientId,
@Value("${spring.security.oauth2.client.registration.my-client1.client-secret:erwerwerwerwe}") String clientSecret,
@Value("${spring.security.oauth2.client.registration.my-client1.scopes:openid}") String scope
) {
ClientRegistration registration = ClientRegistration
.withRegistrationId("my-client1")
.tokenUri(tokenUri)
.clientId(clientId)
.clientSecret(clientSecret)
.authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
.scope(scope)
.build();
return new InMemoryReactiveClientRegistrationRepository(registration);
}
我可以看到 InMemoryReactiveClientRegistrationRepository 可以接受多个 ClientRegistration。我的猜测是我可以通过这种方式添加多个客户端。
但是,我想在应用程序运行时动态使用它们。目前我可以为每个 WebClient bean 设置一个客户端:
@Bean(name = "my-webclient")
public WebClient webClient(@Qualifier("getRegistration") ReactiveClientRegistrationRepository clientRegistrations) {
ServerOAuth2AuthorizedClientExchangeFilterFunction oauth = new ServerOAuth2AuthorizedClientExchangeFilterFunction(
clientRegistrations, new UnAuthenticatedServerOAuth2AuthorizedClientRepository());
oauth.setDefaultClientRegistrationId("my-client1");
return WebClient.builder()
.filter(oauth)
.build();
}
我想验证每个客户端请求它是什么类型的客户端,并为此客户端使用适当的 oauth2 凭据。有什么好的方法可以实现这一目标吗?
解决方案
推荐阅读
- r - 如何定义具有 2 组和 1 列的新列
- php - 不同的字符串编码导致python和php
- python - requests.exceptions.InvalidURL:解析失败
- node.js - Chai/Mocha:尽管识别到 AssertionError,但我的测试不会抛出错误
- activemq - 运行 ActiveMQ 的服务器上的负载增加了很多
- c++ - C++实现二叉树
- c++ - 错误“启动:程序
在 ubuntu 中编写 c++ 的 vscode 中不存在” - node.js - 启动节点 js 服务器时显示警告消息:DeprecationWarning: A boolean value was passed to options
- silk-performer - Silk 执行器中的脚本问题
- asp.net-identity - ASP.NET Core 3.0 - 身份自定义问题