通过Spring Security OAuth专题学习的前面四篇文章(Spring Security OAuth专题学习),对于Spring Security OAUth的基本使用已经有了一些基本的概念。
然而对于资源服务及授权服务生效原理,仍旧一无所知。接下来将从源码层面对Spring Security OAuth相关组件进行分析与学习。
Spring Security OAuth中,资源服务主要完成两个核心功能:一是调用授权服务的接口完成Token有效性验证; 二是调用Spring Security的拦截器完成权限充分性
验证(如当前用户是否具有当前请求所需要的权限)。Token有效性检查由其所引入的Filter来完成验证; 而权限充分性验证由标准Spring Security的功能完成。
主处理流程如下:
下面来进行具体分析。
0. 配置:
通过专题前面系列的文章,可以知道资源服务器相对于普通应用来说主要有两处需要配置:
- 通过EnableResourceServer启用资源服务;
- 通过ResourceServerConfigurer完成对资源服务的相关配置;
下文中,统一将实现ResourceServerConfigurer接口的类称为用户自定义的资源服务器配置类,简称用户自定义配置类;以与ResourceServerSecurityConfigurer
区分; 后者是资源与Security关联的配置信息集合,在下文中简称资源服务配置类,具体说明见后文。
1. 入口:EnableResourceServer
资源服务应用需要使用EnableResourceServer注解来完成相关配置的引入。
定义如下:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(ResourceServerConfiguration.class)
public @interface EnableResourceServer {
}
它所做的事情,就是引入了一个WebSecurityConfigurerAdapter的子类(ResourceServerConfiguration),通过这个配置类来完成资源及请求授权控制相关配置。
WebSecurityConfigurerAdapter是标准Spring Security的一个对Spring Security Filter进行配置的类,可用于配置对请求路径的授权等。
Spring Security中,关于Configuration有两类类,一类是** Configurer这种叫法的,一种是** Configuration这种叫法的;前者一般是对某一对象进行配置的类,如对WebSecurity或者是HttpSecurity对象进行配置;后者指一些配置项的集合或者入口。
2. ResourceServerConfiguration
定义如下:
@Configuration
public class ResourceServerConfiguration extends WebSecurityConfigurerAdapter implements Ordered
它继承自WebSecurityConfigurerAdapter,而这个类正好是标准Spring Security中的配置抽象类!Resource Server通过它与Spring Security实现关联。
ResourceServerConfiguration中主要方法是configure方法,处理流程如下: