认证鉴权与API权限控制在微服务架构中的设计与实现(四)
引言: 本文系《认证鉴权与API权限控制在微服务架构中的设计与实现》系列的完结篇,前面三篇已经将认证鉴权与API权限控制的流程和主要细节讲解完。本文比较长,对这个系列进行收尾,主要内容包括对授权和鉴权流程之外的endpoint以及Spring Security
过滤器部分踩坑的经历。欢迎阅读本系列文章。
1. 前文回顾
首先还是照例对前文进行回顾。在第一篇 认证鉴权与API权限控制在微服务架构中的设计与实现(一)介绍了该项目的背景以及技术调研与最后选型。第二篇认证鉴权与API权限控制在微服务架构中的设计与实现(二)画出了简要的登录和校验的流程图,并重点讲解了用户身份的认证与token发放的具体实现。第三篇认证鉴权与API权限控制在微服务架构中的设计与实现(三)先介绍了资源服务器配置,以及其中涉及的配置类,后面重点讲解了token以及API级别的鉴权。
本文将会讲解剩余的两个内置端点:注销和刷新token。注销token端点的处理与Spring Security
默认提供的有些'/logout'有些区别,不仅清空SpringSecurityContextHolder中的信息,还要增加对存储token的清空。另一个刷新token端点其实和之前的请求授权是一样的API,只是参数中的grant_type不一样。
除了以上两个内置端点,后面将会重点讲下几种Spring Security
过滤器。API级别的操作权限校验本来设想是通过Spring Security
的过滤器实现,特地把这边学习了一遍,踩了一遍坑。
最后是本系列的总结,并对于存在的不足和后续工作进行论述。
2. 其他端点
2.1 注销端点
在第一篇中提到了Auth系统内置的注销端点 /logout
,如果还记得第三篇资源服务器的配置,下面的关于/logout
配置一定不陌生。
//...
.and().logout()
.logoutUrl("/logout")
.clearAuthentication(true)
.logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler())
.addLogoutHandler(customLogoutHandler());
上面配置的主要作用是:
- 设置注销的URL
- 清空Authentication信息
- 设置注销成功的处理方式
- 设置自定义的注销处理方式
当然在LogoutConfigurer
中还有更多的设置选项,笔者此处列出项目所需要的配置项。这些配置项围绕着LogoutFilter
过滤器。顺带讲一下Spring Security
的过滤器。其使用了springSecurityFillterChian
作为了安全过滤的入口,各种过滤器按顺序具体如下:
- SecurityContextPersistenceFilter:与SecurityContext安全上下文信息有关
- HeaderWriterFilter:给http响应添加一些Header
- CsrfFilter:防止csrf攻击,默认开启
- LogoutFilter:处理注销的过滤器
- UsernamePasswordAuthenticationFilter:表单认证过滤器
- RequestCacheAwareFilter:缓存request请求
- SecurityContextHolderAwareRequestFilter:此过滤器对ServletRequest进行了一次包装,使得request具有更加丰富的API
- AnonymousAuthenticationFilter:匿名身份过滤器
- SessionManagementFilter:session相关的过滤器,常用来防止session-fixation protection attack,以及限制同一用户开启多个会话的数量
- ExceptionTranslationFilter:异常处理过滤器
- FilterSecurityInterceptor:web应用安全的关键Filter
各种过滤器简单标注了作用,在下一节重点讲其中的几个过滤器。注销过滤器排在靠前的位置,我们一起看下LogoutFilter
的UML类图。

参考
- 配置表单登录
- Spring Security3源码分析-FilterSecurityInterceptor分析
- Core Security Filters
- Spring Security(四)--核心过滤器源码分析
相关阅读
认证鉴权与API权限控制在微服务架构中的设计与实现(一)
认证鉴权与API权限控制在微服务架构中的设计与实现(二)
认证鉴权与API权限控制在微服务架构中的设计与实现(三)