前言
单点登录,就是同平台的诸多应用登陆一次,下一次就免登陆的功能。就像你在首页登录一次,下一次再访问知乎专栏或是知乎日报就可以免去登录操作。
实现SSO的方式有很多,现在主流的就是CAS这种基于session的单点登录形式。
一、单点登录
1.1、背景
我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的 session 是无法解决的,我们需要使用相关的单点登录技术来解决。
1.2、术语
- Ticket Granting ticket (TGT) :可以认为是CAS Server根据用户名密码生成的一张票,存在server端
- Ticket-granting cookie (TGC) :其实就是一个cookie,存放用户身份信息,由server发给client端
- Service ticket (ST) :由TGT生成的一次性票据,用于验证,只能用一次。相当于server发给client一张票,然后client拿着这是个票再来找server验证,看看是不是server签发的。就像是我给了你一张我的照片,然后你拿照片再来问我,这个照片是不是你。。。没错,就是这么无聊。
1.3、结构
- CAS Server用来负责用户的认证工作,就像是把第一次登录用户的一个标识存在这里,以便此用户在其他系统登录时验证其需不需要再次登录。
- CAS Client就是我们自己的应用,需要接入CAS Server端。当用户访问我们的应用时,首先需要重定向到CAS Server端进行验证,要是原来登陆过,就免去登录,重定向到下游系统,否则进行用户名密码登陆操作。
1.4、步骤
- 1、用户访问应用系统1。过滤器判断用户是否登录,没有登录就重定向(302)到认证CAS系统去进行认证操作。
- 2、重定向到认证系统,显示登录界面,用户输入用户名密码。认证系统将用户登录的信息记录到CAS服务器的session中
- 3、认证系统给浏览器发送一个特殊的凭证ticket,再将其返回到应用系统1,应用系统1再次验证是否有效,有效就保存session并且通过
- 4、用户通过认证,浏览器与网站之间进行正常的访问
- 5、再次访问应用1系统,由于有session信息,就免验证,直接访问页面
- 6、用户访问其他项目时候浏览器会拿着这个凭证ticket去CAS验证,通过就同样的在服务器继续保存一份ssion,后面访问就免登录。从而达到一份验证多个系统使用的目的
1.5、GM和CAS交互通讯
二、sso_platform界面服务
2.1、功能模块
- 天天
- 手心
- 指心
- 系统管理
- 账号管理
- 角色管理
- 菜单管理
- 后台系统管理
2.2、账号管理
- 用户的增删改查
- 重置密码
- 分配角色
- 账号同步:同步账号密码,如:之前手心没这个人信息,就新添了一个账号密码
2.3、角色管理
- 增删改查
- 分配角色菜单
- 分配后台系统
2.4、菜单管理
- 菜单的增删改查
2.5、后台系统管理
- 应用系统的增删改查
- 跳转访问路径
2.6、功能集成介绍
- 单点登录
- 单点登出
- 登录账号角色权限在客户端加载
- 账号信息同步
- 授权子系统查询(例:game_manager选择跳转的下拉框数据加载)
- 提供多种授权机制
- web跳转认证
- ajax认证
- 跳过授权认证(例:数据截图服务)
三、SSO_CAS服务
3.1、接口
- 短信服务(/biz/sms/sendSmsCode)
- 获取公钥(/tools/RSAPublic)
- 生成验证码(/tools/getCaptcha)
- 校验用户是否存在、是否有手机号以及正确(/biz/user/checkUserName)
四、接入单点-客户端
4.1、依赖(此jar存在于公司的nexus私服)
compile('com.haofei:hf-cas-shiro-spring-boot-starter:v0.5-RELEASE')
4.2、添加配置项
# 客户端访问地址 注:需要浏览器能直接访问到的
sso.client-host-url = http://192.168.1.214:8080/game_manager
# 单点登出地址(登出后,跳转的地址)
sso.logout-url = http://192.168.1.213:9090/logout
# 单点平台地址(业务支撑平台)
sso.platform-url = http://192.168.1.213:9090
# 单点cas服务器地址前缀
sso.cas-server-url-prefix = http://192.168.1.213:8090/cas
# 启动单点开关:on/off
sso.switch = on
4.3、实现用户定义接口
com.haofei.boot.sso.casshiro.user.UserDetailService
五、部署
总共分为两个程序,直接丢到服务器用脚本部署启动即可。一个环境只有一个SSO服务
- /data/web_workspace/app/cas/cas.jar
- /data/web_workspace/app/platform/platform.jar
六、数据库
账号密码自己去服务器查看
- dev:213环境
- qa、stage:bd-qa-gmsso-01服务器