JeecgBoot 应用 Spring Authorization Server
Spring Authorizaiton Server,简称sas,是一个授权服务器框架,提供OAuth2.1与Open Connect 1.0认证规范及其他规范的实现,它建立在Spring Security之上,为构建OpenID Connect 1.0 Identity Provider和OAuth2授权服务器产品提供了一个安全、轻量级和可定制的基础。
升级必要性
Spring Authorization Server项目是Spring 团队对原有的Spring Security Oauth模块的升级,同时对Oauth协议的实现由2.0升级到最新的2.1版本,并且现在已经停止了对该模块的维护。另外Spring 团队基于Spring Security Oauth的经验,对大量代码进行了简化,使认证运行效率变得更高,可介入性以及可兼容性比起以前变得更加优秀。
OAuth 2.1基于Oauth2的基础上进行更新,考虑到安全性的问题,移除了OAuth2的简化模式、密码模式。由于现在越来越多的硬件设备具备智能化功能,对设备认证也逐渐有了要求,OAuth2.1 本次新增了设备码认证模式,针对于无浏览器类设备进行登录使用。
JEECG项目介绍
JeecgBoot是一款基于BPM的低代码平台!前后端分离架构 SpringBoot 2.x/3.x,SpringCloud,Ant Design&Vue3,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发! JeecgBoot引领新低代码开发模式 OnlineCoding-> 代码生成器-> 手工MERGE, 帮助Java项目解决70%的重复工作,让开发更多关注业务,既能快速提高效率,节省研发成本,同时又不失灵活性!一系列低代码能力:Online表单、Online报表、Online图表、仪表盘/门户设计、表单设计、流程设计、报表设计、大屏设计 等等…
JEECG开源项目于2012年底发布首版本,到2013年CSDN/ITEYE专家访谈为大家所认知,从开始的谷歌CODE开源到现在的Github,吸引了一大批粉丝!截止目前已近十个春秋,目前Github的Star近4万、论坛会员达2万多、QQ千人群超40个。 JEECG BOOT目前在 Github中文JAVA项目排名第三位、Github全球 JAVA项目排名第19位、Github上JAVA开发框架项目排名第一。
- Github地址:https://github.com/jeecgboot/JeecgBoot
JeecgBoot登录认证
JeecgBoot目前有四种登录情况:
- PC端用户名密码登录(APP登录)
- 手机号登录
- 三方社交平台登录(Github、钉钉、微信、企业微信)
- CAS登录
目前这四种登录情况的核心都是使用的自建JWT token,使用shiro框架完成的登录验证及请求授权验证,由JeecgBoot本身完全请求用户的密码验证、验证码验证等等,两个部分可以看作是完全分离的。如同冰箱的功能是冷藏+冷冻,而我们需要保证放进冰箱的食品有效期。
JeecgBoot如何切换
在前文我们讲到JeecgBoot的用户验证与授权验证是分离式的,所以我们本次切换的注意力只需要放在替换现在的shiro,使用Spring Authorization Server进行登录验证及请求授权验证。
Spring Authoriztion Server默认支持授权码模式、客户端模式、设备码模式及刷新码模式,并且提供了对应的接口,同时也支持自定义扩展。我们可以对AuthenticationProvider接口进行实现,具体实现逻辑可根据自身需求而定,最终只需要返回一个OAuth2AccessTokenAuthenticationToken对象即可。JeecgBoot本次参考了Shiro原有的逻辑进行实现,只不过本次调整了手动生成Token转成由Spring Authorization Server生成Token,同时使用Spring Authorization Server对redis的集成,对生成的认证信息保存至redis中,JeecgBoot刚好可以利用这点,完成对在线用户强制退出功能的继承。
切换之前的逻辑路线为:
- 用户请求登录
- JeecgBoot完成用户密码、验证码等认证
- 使用用户名密码手动生成JWT token
- 用户携带token进行请求时,由shiro对token进行拦截获取其中的用户名,对用户进行token校验及权限校验
切换之后的逻辑路线为:
- 用户请求登录
- JeecgBoot完成用户密码、验证码等认证。
- 使用用户名访问基于Spring Authorization Server扩展的认证模式进行token生成,并保存至redis中。
- 用户携带token进行请求时,Spring Authorization Server对token进行拦截获取其中的用户名,对用户进行token校验及权限校验。
JeecgBoot切换的原因
Jeecg考虑到JeecgBoot的用户群体越来越庞大,甚至部分用户对编码几乎都不了解,JeecgBoot需要降低使用的便利性、安全性、扩展性。而Shiro相对来说,功能太过单薄,扩展性不足,无法与JeecgBoot本身融为一体。本次Spring Authorization Server的加入,可以使认证逻辑与JeecgBoot融为一体,并且自动满足了对通用性认证、跨平台性、多平台性认证协议完成了集成,让JeecgBoot在认证安全领域得到了补齐,更加深层次的保障了普通用户对访问安全功能的需要。