其实默认情况下Spring Authorization Server提供了一个配置类OAuth2AuthorizationServerConfiguration,它是前面Spring Authorization Server DEMO中配置的参考,有兴趣的可以去看一下它。从这个配置类里可以看得出OAuth2AuthorizationServerConfigurer负责Spring Authorization Server的全部配置,接下来我将重点解读它。
和OAuth2LoginConfigurer一样,OAuth2AuthorizationServerConfigurer也继承了AbstractHttpConfigurer,但是远比OAuth2LoginConfigurer复杂,这里我归纳了一下:
AbstractOAuth2Configurer是一个OAuth2配置的抽象:
核心方法init和configure和AbstractHttpConfigurer的一
样,作用也是一样的,这样设计委托代理起来也很方便,它的每个实现都关联一个OAuth2协议相关组件的过滤器
,目前有七个实现。因为OAuth2的组件众多,如果只用一个Configurer类代码量爆炸,可读性、可扩展性肯定非常差,所以通过这种委托的方式非常优雅。OAuth2AuthorizationServerConfigurer
用了LinkedHashMap作为容器来存放这些配置类
private final Map<Class<? extends AbstractOAuth2Configurer>, AbstractOAuth2Configurer> configurers = createConfigurers();
OAuth2AuthorizationEndpointConfigurer.RequestMatcher 授权请求端点,POST或者GET,默认/oauth2/authorize。
OAuth2TokenEndpointConfigurer.RequestMatcher 获取访问令牌端点,POST,默认/oauth2/token。
OAuth2TokenRevocationEndpointConfigurer.RequestMatcher 令牌撤销端点,POST,默认/oauth2/revoke。
OidcConfigurer.RequestMatcher OIDC协议的端点,目前包含了三个匹配规则。
-OidcUserInfoEndpointConfigurer.RequestMatcher 获取OIDC用户信息端点,POST或者GET,默认/userinfo。
-OAuth2AuthorizationEndpointConfigurer.RequestMatcher OIDC客户端注册端点,POST或者GET,默认/connect/register。
OAuth2AuthorizationServerConfigurer开放了一些自定义配置供我们根据业务来调整配置。同样可以分为两大类:
上面四个配置项也可以通过Spring Bean的方式进行配置,但是优先级低于SharedObjects。
//可以对默认初始化的AbstractOAuth2Configurer(参见OAuth2AuthorizationServerConfigurer的configurers属性)进行自定义,
//从而达到个性化配置的目的,这是一种DSL配置风格。
@FunctionalInterface
public interface Customizer<T> {
void customize(T t);
static <T> Customizer<T> withDefaults() {
return (t) -> {
};
}
}
OAuth2AuthorizationServerConfigurer涉及的过滤器这里也列举分类一下,提前预热,后面会详细解读。
AbstractOAuth2Configurer配置的过滤器
OIDC相关的过滤器
OidcConfigurer负责配置OIDC相关的过滤器,它直接负责配置OidcProviderConfigurationEndpointFilter。此外它还代理了两个过滤器的配置: