初识cas单点登录

简介:

Single Sign On,简称SSO,是目前比较流行的企业业务的解决方案之一,
sso是得多个应用系统,用户只需要登录一次就可以访问所有相互信任的应用系统

前言

在了解sso之前,我们先了解下session和cookie

session和cookie都是用来存储特定用户所需的属性以及配置信息文件

session :

	是在服务器端保存一个数据结构,用来跟踪用户状态,这个数据可以保存在集群,数据库,文件中。

Session文件的创建和使用都是在服务器端,浏览器没有权限获得session文件,浏览器只能通过获得的Session ID来发送“请求”获取相关信息。

cookie

 是在客户端保存用户信息的一种机制,用来记录用户信息

结构:

CAS分为两部分CAS Server和CAS Client

CAS Server : 需要单独部署,主要负责对用户的认证工作

CAS Client : client与受保护的客户端应用部署在一起,以Filter方式保护受保护的资源。cas client会分析http请求是否携带Service Ticket 如果没有,则说明当前用户尚未登陆,于是将请求重定向到指定好的cas server登陆地址,并传递service(也就是要访问的目的资源地址)

名词解释:

TGT:Ticket Granting Ticket
TGT 是CAS 为用户签发的登录 ticket,也是用于验证用户登录成功的唯一方式。 TGT 封装了 Cookie 值以及 Cookie 值对应的用户信息,CAS 通过 Cookie 值(TGC)为 key 查询缓存中有无 TGT(TGC:TGT(key:value)),如果有的话就说明用户已经登录成。

TGC:Ticket Granting Cookie
CAS 会将生成的 TGT 放在 session 中,而 TGC 就是这个 session 的唯一标识(sessionId),可以认为是 TGT 的key,为 TGT 就是 TGC 的 value,TGC 以 cookie 的形式保存在浏览器中,每个请求都会尝试携带 TGC。(每个服务都会在 session 和 cookie 中保存对应的 TGT 和 TGC)

ST:Service Ticket
ST 是当用户访问某一服务时提供的 ticket。用户在访问其他服务时,发现没有 cookie 或 ST ,那么就会302到 CAS 服务器获取 ST。然后会携带着 ST 302 回来。

作者:司鑫
链接:https://www.jianshu.com/p/d836afe95698
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

执行流程

1. 用户首次登录,通过浏览器访问系统A,此时系统A将重定向到CAS-SERVER,判断是否有cookie TGC,发现没有重定向到CAS-SERVER的login登录页面。并且带有URl即原始系统地址,以便认证通过跳转

https://localhost:8080/cas/login?service=http://localhost:8081/cas-client

2. 在登录页面输入账号密码认证,认证成功后到cas-server生成TGT,在用TGT生成ST,再重定向返回ST和cookie(TGT)到浏览器


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

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

4. 浏览器的服务器收到ST后带着再去SERVER验证是否是自己签发的,通过后显示信息

首次登录完毕

5.在登录另一个接入CAS的系统B,重定向到CAS-SERVER,判断是否有cookie(TGC),此时有TGC不跳转登录页面,但此时没有ST,去CAS-SERVE申请一个

http://localhost:8080/cas/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步)

流程图:

在这里插入图片描述

官方流程图:

在这里插入图片描述

Cas Clinet端:通过是由一系列的Filet过滤器组成的
cas api:https://github.com/apereo/java-cas-client

Cas Clinet 中的过滤器:
CAS身份验证过滤器: 如果需要认证用户,它将把用户重定向到CAS服务器
AuthenticationFilter
Saml11AuthenticationFilter

协议验证票证:
Cas10TicketValidationFilter (CAS 1.0协议验证票证)
Saml11TicketValidationFilter(SAML 1.1协议验证票证)
Cas20ProxyReceivingTicketValidationFilter(CAS 2.0协议验证票证)
Cas30ProxyReceivingTicketValidationFilter(使用CAS 3.0协议验证票证)
Cas30JsonProxyReceivingTicketValidationFilter(使用CAS 3.0协议验证票证,但该过滤器仍能够接受来自CAS的验证响应,该验证响应按照CAS协议制定的指南格式为JSON)

CAS HttpServletRequest包装过滤器 :返回CAS相关条目在这里插入图片描述

AssertionThreadLocalFilter:将Assertion放置在ThreadLocal需要访问它的应用程序部分中

CAS错误重定向过滤器:DelegatingFilterProxy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值