序
几个月前写过一篇关于SSO单点登录的文章,昨天夜里有位掘友提出了CAS登录才是正解,于是今天我整理了一下,把CAS以我的理解写出来供大家参考。
回顾
基于Cookie的单点登录核心原理:
- 将用户名密码加密之后存于Cookie中,之后访问网站时在过滤器(filter)中校验用户权限,如果没有权限则从Cookie中取出用户名密码进行登录,让用户从某种意义上觉得只登录了一次。
- 该方式缺点就是多次传送用户名密码,增加被盗风险,以及不能跨域。
设计
- 页面访问前端地址,调用后端接口判断是否使用cas,如果使用cas,前端根据后端返回的地址拼接请求到cas登录页。
- 在cas登录页面登录成功后携带ticket重定向到前端页面
- 前端获取到ticket后,调用后端接口,后端接口根据ticket调用cas获取登录账号。
- 前端获取到当前登录账号后调用业务系统登录接口模拟业务系统用户登录。
讲解
- 浏览器访问URL2,URL2中有【登录】操作,点击登录,跳转至认证中心,此时认证中心判断自己系统是否登录
- 如果没有登录,则跳转至用户登录页面。
- 如果登录了,则生成一个ticket具备时效唯一的票据,通过redirectUrl拼接,返回URL2。
- 此时URL2通过截取,拿到返回的ticket,通过接口解析,拿到用户的token,并存储到本地
以上便是单一的cas统一认证
下面介绍不同域名如何做到单点
- 如果URL1是与URL2不同域名的,那么只要在统一认证中心,写一个新的vue文件,规定好第三方系统跳转到认证中心的方式,例如带第三方的一种身份认证方式。
- 认证中心截取到第三方的认证方式,于是调取结合第三方的解析接口,生成票据,返回给第三方,第三方拿到票据同样做一个解析ticket,存储token。
- 此时不同域名的单点也完美解决。