• 【OAuth2】十二、Spring Authorization Server的配置


    一、Spring Authorization Server的配置

    其实默认情况下Spring Authorization Server提供了一个配置类OAuth2AuthorizationServerConfiguration,它是前面Spring Authorization Server DEMO中配置的参考,有兴趣的可以去看一下它。从这个配置类里可以看得出OAuth2AuthorizationServerConfigurer负责Spring Authorization Server的全部配置,接下来我将重点解读它。

    二、 OAuth2AuthorizationServerConfigurer

    和OAuth2LoginConfigurer一样,OAuth2AuthorizationServerConfigurer也继承了AbstractHttpConfigurer,但是远比OAuth2LoginConfigurer复杂,这里我归纳了一下:
    在这里插入图片描述
    在这里插入图片描述

    1、管理AbstractOAuth2Configurer

    AbstractOAuth2Configurer是一个OAuth2配置的抽象:
    在这里插入图片描述
    核心方法init和configure和AbstractHttpConfigurer的一样,作用也是一样的,这样设计委托代理起来也很方便,它的每个实现都关联一个OAuth2协议相关组件的过滤器,目前有七个实现。因为OAuth2的组件众多,如果只用一个Configurer类代码量爆炸,可读性、可扩展性肯定非常差,所以通过这种委托的方式非常优雅。OAuth2AuthorizationServerConfigurer用了LinkedHashMap作为容器来存放这些配置类

    	private final Map<Class<? extends AbstractOAuth2Configurer>, AbstractOAuth2Configurer> configurers = createConfigurers();
    
    • 1

    2、请求路径匹配RequestMatcher

    2.1、AbstractOAuth2Configurer的实现中也有路径匹配规则。

    • OAuth2AuthorizationEndpointConfigurer.RequestMatcher 授权请求端点,POST或者GET,默认/oauth2/authorize。

    • OAuth2TokenEndpointConfigurer.RequestMatcher 获取访问令牌端点,POST,默认/oauth2/token。

    • OAuth2TokenRevocationEndpointConfigurer.RequestMatcher 令牌撤销端点,POST,默认/oauth2/revoke。

    • OidcConfigurer.RequestMatcher OIDC协议的端点,目前包含了三个匹配规则。

      • OIDC规定的Provider配置信息端点,必须为GET请求,路径固定为/.well-known/openid-configuration。
    • -OidcUserInfoEndpointConfigurer.RequestMatcher 获取OIDC用户信息端点,POST或者GET,默认/userinfo。

    • -OAuth2AuthorizationEndpointConfigurer.RequestMatcher OIDC客户端注册端点,POST或者GET,默认/connect/register。

    2.2、开放的自定义配置

    OAuth2AuthorizationServerConfigurer开放了一些自定义配置供我们根据业务来调整配置。同样可以分为两大类:

    • 共享对象
      有些自定义配置会通过OAuth2AuthorizationServerConfigurer的方法被放入SharedObjects,分享给其它的配置类,目前有:
    • RegisteredClientRepository
    • OAuth2AuthorizationService
    • OAuth2AuthorizationConsentService
    • ProviderSettings
    上面四个配置项也可以通过Spring Bean的方式进行配置,但是优先级低于SharedObjects。
    
    • 1
    • 进行自定义对象
    //可以对默认初始化的AbstractOAuth2Configurer(参见OAuth2AuthorizationServerConfigurer的configurers属性)进行自定义,
    //从而达到个性化配置的目的,这是一种DSL配置风格。
    @FunctionalInterface
    public interface Customizer<T> {
    
    	void customize(T t);
    	static <T> Customizer<T> withDefaults() {
    		return (t) -> {
    		};
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3、涉及的过滤器

    OAuth2AuthorizationServerConfigurer涉及的过滤器这里也列举分类一下,提前预热,后面会详细解读。

    • 直接配置的Filter
      由OAuth2AuthorizationServerConfigurer直接配置的过滤器:
      • ProviderContextFilter
      • OAuth2TokenIntrospectionEndpointFilter
      • NimbusJwkSetEndpointFilter
      • OAuth2AuthorizationServerMetadataEndpointFilter

    AbstractOAuth2Configurer配置的过滤器

      • OAuth2AuthorizationEndpointFilter 其配置类为- -OAuth2AuthorizationEndpointConfigurer。
      • OAuth2ClientAuthenticationFilter 其配置类为OAuth2ClientAuthenticationConfigurer。
      • OAuth2TokenEndpointFilter 其配置类为OAuth2TokenEndpointConfigurer。
      • OAuth2TokenRevocationEndpointConfigurer 其配置类为OAuth2TokenRevocationEndpointFilter。
    • OIDC相关的过滤器
      OidcConfigurer负责配置OIDC相关的过滤器,它直接负责配置OidcProviderConfigurationEndpointFilter。此外它还代理了两个过滤器的配置:

      • OidcUserInfoEndpointFilter 其配置类为OidcUserInfoEndpointConfigurer。
      • OidcClientRegistrationEndpointFilter 其配置类为OidcClientRegistrationEndpointConfigurer。
  • 相关阅读:
    展开说说:Android之SharedPreferences
    ts中的元组是什么有什么用
    CI/CD 编译golang项目依赖包使用自建的gitlab仓库 免密码配置
    路由和交换在运营商网络的综合实验
    面向对象的设计-设计模式-5种创建型模式
    万字带你入门Go语言(建议收藏)
    Fullcalendar(简单的日程管理)
    错误解决:Process finished with exit code 132 (interrupted by signal 4: SIGILL)
    C# 线程与任务
    静态语言和动态语言,解释和编译
  • 原文地址:https://blog.csdn.net/weixin_43333483/article/details/126088326