cas单点登录原理
什么是单点登录
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。
SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
应用场景
假设你正在腾讯网首页浏览某则新闻想收藏它
你点击收藏按钮
网站提示你需要登录
你扫码或输入用户名密码登录
浏览器跳转到你之前浏览的页面
并提示你收藏成功
看完新闻你突然发现勇士队的比赛要开了
你可是勇士的忠实球迷
买了勇士的vip
此时你从浏览器打开腾讯体育
跳转到页面
你发现右上角你的会员专属图标在闪烁
然后你打开比赛沉浸之中
CAS单点登录
CAS单点登录是单点登录的一种,它是基于Cookie实现的。
重要概念
Ticket Granting ticket (TGT) :可以认为是CAS Server根据用户名密码生成的一张票,存在Server端
Ticket-granting cookie (TGC) :其实就是一个Cookie,存放用户身份信息,由Server发给Client端
Service ticket (ST) :由TGT生成的一次性票据,用于验证,只能用一次。相当于Server发给Client一张票,然后Client拿着这个票再来找Server验证,看看是不是Server签发的。
CAS单点登录时序图
主要流程分析
假设服务a与服务b存在单点登录
——————————————————————
浏览器请求服务a的资源(第一次) 未携带也不存在任何认证信息
服务a的后端的response将浏览器重定向到认证中心 携带跳转地址
登录认证中心
认证中心的response将浏览器重定向到第一次请求a资源的地址并附上ticket 携带CASTGC
浏览器请求a资源的地址+ticket
服务a利用ticket到认证中心进行验证
认证中心给服务a返回认证成功信息
服务a给浏览器发送重定向response将浏览器重定向到第一次访问服务a的地址,并设置JSESSIONID
浏览器请求服务a地址 携带JSESSIONID
服务a验证session有效并返回请求资源
——————————————————————
浏览器请求服务a的资源(第二次) 已存在JSESSIONID
服务a验证session有效并返回请求资源
——————————————————————
浏览器请求服务b的资源(第一次)
服务b的response将浏览器重定向到认证中心 携带跳转地址
浏览器请求认证中心地址 携带CASTGC(访问服务a生成)
认证中心发现有TGC(已认证),response将浏览器重定向到服务b 携带ticket
浏览器请求服务b+ticket
服务b利用ticket到认证中心进行验证
认证中心给服务b返回认证成功信息
服务a给浏览器发送重定向response将浏览器重定向到第一次访问服务b的地址,并设置JSESSIONID
浏览器请求服务b地址 携带JSESSIONID
服务b验证session有效并返回请求资源