cas 单点登录_分布式系统之基于CAS实现SSO单点登录

CAS代码和接入demo网上满天飞,也挺简单,不再赘述,这里仅理一下CAS原理和基础模式流程。

所谓单点登录,就是同平台的诸多应用登陆一次,下一次就免登陆的功能。就像你在知乎首页登录一次,下一次再访问知乎专栏或是知乎日报就可以免去登录操作。

实现SSO的方式有很多,现在主流的就是CAS这种基于session的单点登录形式。

结构

CAS分为两部分,CAS Server和CAS Client:

  • CAS Server用来负责用户的认证工作,就像是把第一次登录用户的一个标识存在这里,以便此用户在其他系统登录时验证其需不需要再次登录。
  • CAS Client就是我们自己的应用,需要接入CAS Server端。当用户访问我们的应用时,首先需要重定向到CAS Server端进行验证,要是原来登陆过,就免去登录,重定向到下游系统,否则进行用户名密码登陆操作。

术语

  • Ticket Granting ticket (TGT) :可以认为是CAS Server根据用户名密码生成的一张票,存在server端。
  • Ticket-granting cookie (TGC) :其实就是一个cookie,存放用户身份信息,由server发给client端。
  • Service ticket (ST) :由TGT生成的一次性票据,用于验证,只能用一次。相当于server发给client一张票,然后client拿着这是个票再来找server验证,看看是不是server签发的。就像是我给了你一张我的照片,然后你拿照片再来问我,这个照片是不是你。。。没错,就是这么无聊。

流程

1. 用户访问网站,第一次来,重定向到 CAS Server,发现没有cookie,所以再重定向到CAS Server端的登录页面,并且URL带有网站地址,便于认证成功后跳转

  • 形如 http ://cas-server:8100/login?service=http ://localhost:8081

service后面这个地址就是登录成功后要重定向的下游系统URL。

2. 在登陆页面输入用户名密码认证,认证成功后cas-server生成TGT,再用TGT生成一个ST。 然后再第三次重定向并返回ST和cookie(TGC)到浏览器

3. 浏览器带着ST再访问想要访问的地址

http ://localhost:8081/?ticket=ST-25939-sqbDVZcuSvrvBC6MQlg5

  • ticket后面那一串就是ST

4. 浏览器的服务器收到ST后再去cas-server验证一下是否为自己签发的,验证通过后就会显示页面信息,也就是重定向到第1步service后面的那个URL

  • 首次登陆完毕

5. 再登陆另一个接入CAS的网站,重定向到CAS Server,server判断是第一次来(但是此时有TGC,也就是cookie,所以不用去登陆页面了),但此时没有ST,去cas-server申请一个吧!于是重定向到cas-server

  • 形如:http: //cas-server:8100/login?service=http ://localhost:8082 && TGC(cookie) (传目标地址和cookie)

6. cas-server生成了ST后重定向给浏览器

  • http ://localhost:8082/?ticket=ST-25939-sqfsafgefesaedswqqw5-xxxx

7. 浏览器的服务器收到ST后再去cas-server验证一下是否为自己签发的,验证通过后就会显示页面信息(同第4步)

简易流程图如下:

768a079ed63ee60bb59b922dcbfb14fd.png

本文来自知乎专栏《编程之路》

作者:KKys

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值