sso单点登录是什么
java实现SSO
什么是SSO
SSO(Single Sign On)单点登录是实现多个系统之间统一登录的验证系统,简单来说就是:有A,B,C三个系统,在A处登录过后,再访问B系统,B系统就已经处于了登录状态,C系统也是一样。举个生活中栗子:你同时打开天猫和淘宝,都进入login界面,都要求你登录的,现在你在淘宝处登录后,直接在天猫处刷新,你会发现,你已经登录了,而且就是你在淘宝上登录的用户。说明他们实现了SSO,并且持有相同的信息。
当然这个特性意味着它的使用场景是:同一公司下的不同子系统,因为对于SSO来说,每一个子系统拥有的信息都一样,是用户的全部信息,如果是不同公司,那这肯定不合适。现在的天猫和淘宝就是这样的一套SSO。
客户端实现步骤
客户端api
1.sso/login?service=http://www.baidu.com 登录接口判断用户是否登录
- 未登录跳转至登录界面
- 已登录 返回 https://www.baidu.com/?ticket=ST-4267646-GW54oRgSfRCIdffuJNSt-cas service地址附带ticket
票据 注意票据是一次性的,根据当前访问login接口的service和session组合生成一次ticket 使用后失效
2./sso/validate?ticket=ST-3106711-eQcTqZUlfdU3R2fmL6Wk-cas&service=http://www.baidu.com 票据验证接口
- 更具票证获取用户账号接口
- 验证参数有ticket 和service 中的 url 这个url 需和login 中获取票证的url一致
3.如获取用户账号成功则登录当前系统,设置保存当前系统用户状态
服务端
1.login 接口功能
- 判断是否登录
- 是: 公共步骤
- 否:进入登录界面
- 进行登录将登录后userId 存入session 中
公共步骤:生成 url+sessionId+md5 生成ticket 将ticket存入session中重定向service 中的url 并且附带ticket参数
2.获取用户账号接口validate
- 根据validate 接口获取对应ticket 和url 在session 中进行校验判断是否已有登录标识,如果有则返回userId信息
3.out接口,退出单点登录接口
-清除对应session缓存的用户信息