【问题标题】:Spring Security: Custom RequestEntityConverter with multiple clientsSpring Security:具有多个客户端的自定义 RequestEntityConverter
【发布时间】:2021-03-06 22:38:07
【问题描述】:
【问题讨论】:
标签:
spring-security
spring-security-oauth2
【解决方案1】:
多租户通常没有完美的解决方案,因为很大程度上取决于您希望在请求中多早分叉行为。
在 Spring Security 的 OAuth 2.0 客户端支持中,ClientRegistration 是租户,并且该租户信息在大多数客户端 API 中都可用。
例如,您的Auth0RequestEntityConverter 可能会根据请求中的ClientRegistration 有不同的行为:
public RequestEntity<?> convert(
OAuth2ClientCredentialsGrantRequest request) {
ClientRegistration client = request.getClientRegistration();
if (client ...) {
} else if (client ...) {
} ...
}
或者,如果您需要配置比请求实体转换器更多的东西,您可以通过为每个提供者构造一个OAuth2AuthorizedClientManager 来更早地分叉行为:
public class ClientsOAuth2AuthorizedClientManager implements OAuth2AuthorizedClientManager {
private final Map<String, OAuth2AuthorizedClientManager> managers;
// ...
public OAuth2AuthorizedClient authorize(OAuth2AuthorizeRequest request) {
String clientRegistrationId = request.getClientRegistrationId();
return this.managers.get(clientRegistrationId).authorize(request);
}
}