引言: 本文系《认证鉴权与API权限控制在微处事架构中的设计与实现》系列的第三篇,本文重点讲解token以及API级另外鉴权。本文对涉及到的大部分代码进行了分析,欢迎订阅本系列文章。
1. 前文回顾在开始讲解这一篇文章之前,先对之前两篇文章进行回忆下。在第一篇 认证鉴权与API权限控制在微处事架构中的设计与实现(一)介绍了该项目的配景以及技术调研与最后选型。第二篇认证鉴权与API权限控制在微处事架构中的设计与实现(二)画出了简要的登录和校验的流程图,并重点讲解了用户身份的认证与token发放的具体实现。
本文重点讲解鉴权,包孕两个方面:token合法性以及API级另外操纵权限。首先token合法性很容易理解,第二篇文章讲解了获取授权token的一系列流程,,token是否是认证处事器公布的,一定是需要验证的。其次对付API级另外操纵权限,将上下文信息不具备操纵权限的请求直接拒绝,固然此处是设计token合法性校验在先,其次再对操纵权限进行验证,如果前一个验证直接拒绝,通过则进入操纵权限验证。
2.资源处事器配置ResourceServer配置在第一篇就列出了,在进入鉴权之前,把这边的配置搞清,即使有些配置在本项目中没有用到,大家在本身的项目有可能用到。
1 @Configuration 2 @EnableResourceServer 3 public class ResourceServerConfig extends ResourceServerConfigurerAdapter { 4 //http安适配置 5 @Override 6 public void configure(HttpSecurity http) throws Exception { 7 //禁失csrf,设置session计谋 8 http.csrf().disable() 9 .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) 10 .and()//默认允许访谒 11 .requestMatchers().antMatchers("/**") 12 .and().authorizeRequests() 13 .antMatchers("/**").permitAll() 14 .anyRequest().authenticated() 15 .and().logout() //logout注销端点配置 16 .logoutUrl("/logout") 17 .clearAuthentication(true) 18 .logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler()) 19 .addLogoutHandler(customLogoutHandler()); 20 } 21 //添加自界说的CustomLogoutHandler 22 @Bean 23 public CustomLogoutHandler customLogoutHandler() { 24 return new CustomLogoutHandler(); 25 } 26 //资源安适配置相关 27 @Override 28 public void configure(ResourceServerSecurityConfigurer resources) throws Exception { 29 super.configure(resources); 30 } 31 }
(1). @EnableResourceServer这个注解很重要,OAuth2资源处事器的简便注解。其使得Spring Security filter通过请求中的OAuth2 token来验证请求。凡是与EnableWebSecurity共同使用,该注解还创建了硬编码的@Order(3) WebSecurityConfigurerAdapter,由于当前spring的技术,order的挨次不易改削,所以在项目中制止还有其他order=3的配置。
(2). 关联的HttpSecurity,与之前的 Spring Security XML中的 “http”元素配置类似,它允许配置基于web安适以针对特定http请求。默认是应用到所有的请求,通过requestMatcher可以限定具体URL范畴。HttpSecurity类图如下。
总的来说:HttpSecurity是SecurityBuilder接口的一个实现类,从名字上我们就可以看出这是一个HTTP安适相关的构建器。固然我们在构建的时候可能需要一些配置,当我们挪用HttpSecurity东西的要领时,实际上就是在进行配置。
authorizeRequests(),formLogin()、httpBasic()这三个要领返回的分袂是ExpressionUrlAuthorizationConfigurer、FormLoginConfigurer、HttpBasicConfigurer,他们都是SecurityConfigurer接口的实现类,分袂代表的是差别类型的安适配置器。
因此,从总的流程上来说,当我们在进行配置的时候,需要一个安适构建器SecurityBuilder(例如我们这里的HttpSecurity),SecurityBuilder实例的创建需要有若干安适配置器SecurityConfigurer实例的共同。