同花顺
一个企业,有很多个软件。
有一天,领导心血来潮,闲的发慌,想要检查一下公司内部的各个系统的操作记录,看看有没有人吃回扣。
他首先打开管钱的系统,输入账号密码。
然后又打开管人系统,输入账号密码。
然后又打开通讯系统,输入账号密码。
终于受不了了,我屮艸芔茻。
大喊一声:小美,把信息部的老王给我喊过来。
单点登录举例
百度:百度贴吧,百度网盘。
淘宝:订单系统,支付系统。
京东:用户系统,购物车系统。
以上统一,都没有让你重复登录,但它们每一个都可以作为一个独立的系统来运行。
Cas家庭组
一个Cas-Server与多个Cas-Client共同组成了一个大家庭。
只要在Cas-Server登录后,大家庭里所有的客户端都可以免登录。
画了一个草图:
想宠幸哪个就宠幸哪个。
单点登录哪家强
市场上有两种技术用于单点登录,分别是CAS与JWT,两个互有优缺点,我更倾向于JWT,但是用什么技术,我说了不算,boss说了算。
对不起周深(JWT),我喜欢李维(CAS)。
CAS
基于Session的认证,Cas-Server与Cas-Client之间的交流通过Session来完成。
HTTP的请求本身是无状态的,所以引入了Session的概念,存储在服务端,这样每次请求到来,都可以知道,oh,soga,isyou。这样子,无状态的请求就变成了有状态的请求,这是Cas。
JWT
基于Token的认证,一般应用于微服务架构项目中。
JWT采用的是无状态的登录方式,不像Cas客户端依赖于服务端。JWT的服务端不保存任何客户端请求信息,客户端的每次请求必须自己介绍自己是谁,服务端判断你有没有骗服务器。
Cas原理分析
在整个单点登录的过程中,我们部署了一个独立的cas-server项目,我们给我们的客户端集成了Cas。
浏览器,cas-server,cas-client,三者之间是怎样的一个交互过程。
网上有一张流传很广的图,三角形的,像那个啥一样。
访问流程
1、浏览器访问客户端A。
2、客户端A发现没有认证,重定向到cas-server认证去吧。
3、认证成功,cas-server返回给客户端A,TGC和ST。
4、客户端A拿到了TGC和ST,。
5、客户端A再次访问cas-server进行验证。
6、验证通过,返回自己本身客户端A。
7、现在,我们(浏览器)想要访问另一个客户端了,输入了我们的客户端B地址,跳转到cas-server,发现你身上有TGC,但是没有ST,cas-server给你生成ST。
8、客户端B拿到了TGC和ST,跑过去验证一下,通过,放行。
原理总结:
这是一种双重保护,不管是哪一个客户端,只要拿到TGC和ST,都必须到cas-server验证一下。
正儿八经的流程上,我们可以看到,这个ST明明是你刚给客户端发过去的,为什么还要验证呢,但是就这么一会的时间,如果有别的客户端伪造假的呢?
Ticket机制
TGT:数据结构为:<TGC,TGT>,留在服务端,TGC下放。
TGC:携带用户信息,cas-server明确用户身份的凭证。
ST:CAS为用户签发的访问某个service的一次性票据。
service:子系统地址。
TGT(Ticket Granting Ticket):dad
TGC(Ticket Granting cookie):mother
ST(Service Ticket):son
看这个比喻,形象。
1、认证成功之后,cas-server这个老爷爷,生下了一男(TGT)一女(TGC),然后这夫妻俩又生下了一个儿子,取名叫ST。
2、dad留在了家中(cas-server),mother与son去了他乡(cas-client)。
3、他乡待了一会,mother与son想dad了,访问cas-server,dad一看,哟,是不是我儿子啊,滴血认亲一下(验证)。
4、验证通过,是dad的son,一家三口过上了快乐的生活。
5、小别胜新婚,大别如初耶,快乐的日子总是短暂的,三个人团聚后,第二天娘俩又回到了客户端,访问成功。
Cas跳转实例
现在我们想要访问:http://localhost:8020
1、浏览器输入http://localhost:8020,重定向到cas-server认证界面。
地址栏变为:
http://localhost:8080/cas/login?service=http://localhost:8020
service就是客户端子系统地址,即目标地址。
2、cas-server认证页面输入用户名密码验证,认证成功后car-server生成TGT,授权的这个票,存在server端不走了。TGT生成ST,然后ST与TGC一起返回给前端。
3、现在浏览器有了cookie和ST,前端地址栏地址为:
http://localhost:8020/?ticket=ST-1-7I7963LWBGk1jcUCfbls-xiaolaoben
4、客户端接受请求经过cas-client的多个过滤器,跑到cas-server进行一番确认,根据TGC判断TGT是否存在,随后TGT判断该ST是否是自己签发的,匹配成功则登录成功,重定向service地址。
5、另一个应用系统第一次访问,重定向到cas-server,发现第一次来,但是cas-server中已经有TGC了,所以不用去server的登录页面了。但是没有ST,所以server生成ST,返回前端。
6、浏览器收到ST后,再次去cas-server鉴定,匹配成功,登录成功。
Cas-Server作用
老爷爷生一男一女。(认证通过)
一男一女再生娃。(娃用于校验)
客户端免登录原理
每一个客户端带着娘俩(TGC和ST)到Cas-Server验证,通过即可免登录。
不是说你随便造一个ST,来一大串字符串就可以假装是TGT的儿子的,TGT滴血认亲,就问你怕不怕,所以说mother(TGC),你不带着亲son(ST),你别想我(TGT)放行。
Cas实现步骤
单点登录还是很容易实现的,一共可以分为两步:
1、搭建Cas-Server客户端项目。
2、客户端集成到Cas-Server。
soeasy。