前言
关于 OAuth2.0的认证体系,翻阅了好多资料,RCF 文档太多,看了一半就看不下去了,毕竟全英文的文档看起来,是有一点让我烦躁,但也对 OAuth2.0的认证流程有了一个基本的概念,之前用 SpringSecurity 做了一个基于 RBAC 的权限管理系统的基础配置,所以对 SpringSecurity 算是比较了解了,于是 OAuth2.0的实现,也想用 SpringSecurity 的来做,心想应该比较简单,然而...事实上,我反反复复,拿起又放弃,放弃又拿起,来来回回折腾了3个多月,才真正的掌握了这个 OAuth2.0插件(OAuth2.0不是一个独立的框架,只是 SpringSecurity 的一个插件而已)。
官网的 Demo 配置,是基于 JavaConfig 的配置方式,以前都用 XML 的,没接触过 JavaConfig,所以又绕了一圈,把 JavaConfig 方式的所有框架(Spring、SpringMVC、Mybatis、SpringSecurity、Web.xml)基本配置方式都走了一圈, 确实,全代码配置是很酷,很清爽,说实话,今后我也会逐渐往这方面走,因为这个方式比较有代码感,哈哈,但是现在还不行,因为有很多插件啊、特殊的配置方式啊,我都还不清楚要怎么配置,处于安全考虑,还是老老实实的用 XML 的比较好。
项目的说明
网上有很多,SpringSecurityOAuth2.0的配置文章,但是每个文章,都是将认证服务器和资源服务器写在一起的,并没有将认证与资源分离,也没有讲不同的资源之间如何拆分,然而我们在设计分布式系统的时候,总会以模块化的方式,将不同的资源写成不同的项目,比如,将网站的一个电商系统,专门写成一个项目,把网站中的论坛系统,写成另一个项目,部署的时候,每个项目就可以单独部署,后端系统均以 RESTFull 的方式开放数据接口(RESTFull就是推荐使用 OAuth2.0的方式进行认证管理)。这样的方式来设计程序,最大的优点就是模块之间相互独立,互不干涉,在开发工作当中,可以并行开发,单独维护,同时模块分离出来,今后还可以进行很便利的集群,而不需要修改任何原来的代码,所以对整个项目的扩展性是非常好的,不同的项目之间,可以简单的使用 HttpClient 进行通讯,OAuth2.0五种授权模式当中,有一种授权模式就是为这种资源服务器之间的通讯而设计的。