Cas单点登录原理分析

同花顺

一个企业,有很多个软件。

有一天,领导心血来潮,闲的发慌,想要检查一下公司内部的各个系统的操作记录,看看有没有人吃回扣。

他首先打开管钱的系统,输入账号密码。

然后又打开管人系统,输入账号密码。

然后又打开通讯系统,输入账号密码。

终于受不了了,我屮艸芔茻。

大喊一声:小美,把信息部的老王给我喊过来。

单点登录举例

百度:百度贴吧,百度网盘。

淘宝:订单系统,支付系统。

京东:用户系统,购物车系统。

以上统一,都没有让你重复登录,但它们每一个都可以作为一个独立的系统来运行。

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。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值