之前也做过好几个系统的sso接入,都是基于ssm架构的项目,而且没有做前后端分离,接入相对简单,最近有一个基于springboot+shiro+jwt的前后端分离项目需要接入sso平台,大体过程是知道的,但是具体技术实现没有头绪,网上相关的资料也比较少,而且很粗略,经过几天的研究,踩了许多的地雷,终于完成了sso接入,现在就把完整的方案分享一下和具体实现以及源码都分享一下。
因为项目采用shiro+jwt的认证方式, shiro 官方在 1.2 中就表明已经弃用了 CasFilter,故引入 pac4j 来做单点登录的控制, pac4j支持对shiro的调用。重写ShiroConfig整合cas权限认证,通过pac4j实现cas的跳转。
具体分析如下:
eg:http://127.0.0.1:8085/cas/login?service=http//127.0.0.1:8081/index
2.登陆成功后sso会生成一个ticket一并返回给应用系统,作为系统的认证凭据,然后跳回系统:
http//127.0.0.1:8081/index?ticket=*******
3..拦截到请求,通过解析拿到对应的登陆成功的用户名,根据用户名去查找对应的角色权限,再用jwt生成token,携带登陆成功所需要的数据重定向到前端页面,完成登录成功操作。
具体代码实现请看:springboot前后端分离接入cas技术方案及实现(二)