OAuth2资源由过滤链保护,过滤链的顺序为security.oauth2.resource.filter-order。
默认情况下,在过滤器中顺序如下
- AuthorizationServerConfigurerAdapter
- ResourceServerConfigurerAdapter
- WebSecurityConfigurerAdapter
很多文章写的oauth的时候把三者写在同一个工程中,这样变得很难理解。
如果想搞精通spring security 体系建议还是去看官方文档.
那么在理解这全套机制前需要搞清楚几个概念
1、认证授权服务器
2、授权客户端
3、资源服务器
4、资源所有者
授权客户端 相对 认证授权服务器而言得客户端,授权客户端可以在资源服务器上起作用,也可以认为资源服务器就是一个授权客户端。资源所有者即用户。
那么在spring security 体系中之前已经介绍过了spring security体系是通过filter chain 完成了全套得安全体系。spring security中留出来得配置入口为WebSecurityConfigurerAdapter
而Oauth2.0 中需要得两个入口则为AuthorizationServerConfigurerAdapter
用于配置认证授权服务器和ResourceServerConfigurerAdapter
用户配置资源服务器。
那么显而易见。你需要保护得资源上配置ResourceServerConfigurerAdapter
即可,如你得订单中台,财务中台、商品中台,全部都可以配上ResourceServerConfigurerAdapter
。而你得认证授权中台 配置AuthorizationServerConfigurerAdapter
即可。
对于上面描述得三个Adapter都有相似之处,就是他们得处理流程都是一致得。
- 在
WebSecurityConfigurerAdapter
中你可以去扩展认证器,实现UserdetailService 接口,重写loadUserByUsername,然后实现AuthenticationProvider。当然你可以使用默认得。 - 在
AuthorizationServerConfigurerAdapter
一样得流程你可以实现ClientDetailService ,重写loadClientByClientId 然后实现OAuth2AuthenticationManager 重写认证方法进行认证。 - 在
ResourceServerConfigurerAdapter
中 实现OAuth2ProtectedResourceDetails接口实现其中方法。
总体而言如果能理解以上这几个点。基本上就能使用spring security体系了。单然其中还会涉及到
- token得生成
- 添加验证码
- token存储
- 密码加密
- 登出注销
- 权限控制
- 自定义fliter
- json返回
- 异常处理
- …
一系列得功能,我这边不多做介绍,仅仅记录下自己学习过程中感觉最重要得点。如果你想了解更多可以去看官方文档。但是你只要搞清楚以上三个概念和扩展入口,你会发现这个东西很简单。单然你还要搞清楚Oauth2.0得概念才行。
总而言之,spring security体系做了一件事情就是把你在服务器或者数据库存得数据做了一层抽象,另一边将浏览器或者客户端传过来得资源做了一层抽象,然后将两者按照一定得规则组装到一个管理器里面去做一系列得业务逻辑判断,当然包括此管理器得业务逻辑判断它也做了一层抽象便于你可以自定义。