【问题标题】:Spring Security: Custom RequestEntityConverter with multiple clientsSpring Security:具有多个客户端的自定义 RequestEntityConverter
【发布时间】:2021-03-06 22:38:07
【问题描述】:

我正在努力让 Auth0 的客户端凭证流使用 Spring Security 5.4.1 工作。我创建了一个小演示应用程序供参考:https://github.com/mathias-ewald/spring-security-auth0-clientcredentials-demo

一切正常,但我想知道如何处理多个 OAuth2 客户端。据我了解,OAuth2ClientSecurityConfig 中所做的配置对于流向任何提供者的所有客户端凭据流均有效,对吗?

如果我有另一个提供者并且不想以相同的方式转换 RequestEntity 怎么办?

【问题讨论】:

    标签: 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-11-15
      • 1970-01-01
      • 2022-11-08
      • 2020-10-04
      • 2021-03-19
      • 2019-02-21
      • 2013-01-08
      • 2012-10-22
      • 2019-09-26
      相关资源
      最近更新 更多