CAS,Central Authentication Service—中央认证服务,旨在为Web应用系统提供一种可靠的SSO解决方案。下面简单介绍SSO,重点介绍CAS认证过程。

一、SSO简介

  1.1   概念

  SSO英文全称Single Sign On,是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次 就可以访问所有相互信任的应用系统。

  1.2  角色

  一般 SSO 体系主要角色有三种:

  *  User (多个)

  * Web 应用(多个)

  * SSO 认证中心( 一个 )

  1.3  原则

  SSO 实现模式一般包括以下三个原则:

  *  所有的认证登录都在 SSO 认证中心进行;

  *  SSO 认证中心通过一些方法来告诉 Web 应用当前访问用户究竟是不是已通过认证的用户;

  *  SSO 认证中心和所有的 Web 应用建立一种信任关系,也就是说 web 应用必须信任认证中心。(单点信任)

二、    CAS原理介绍

  2.1  体系结构

    从结构体系看,CAS 包括两部分: CAS Server 和 CAS Client 。

    CAS Server负责完成对用户的认证工作 ,会为用户签发两个重要的票据:登录票据(TGT)和服务票据(ST)来实现认证过程, CAS Server需要独立部署 。

    CAS Client负责处理对客户端受保护资源的访问请求,需要对请求方进行身份认证时,重定向到 CAS Server 进行认证。准确地来说,它以Filter 方式保护受保护的资源。对于访问受保护资源的每个 Web 请求,CAS Client 会分析该请求的 Http 请求中是否包含 ServiceTicket(服务票据,由 CAS Server发出用于标识目标服务)。CAS Client 与受保护的客户端应用部署在一起。

  由上可知,它符合SSO中的角色架构,如下:

  *  User (多个)

  *  Web 应用(多个CAS Client—与Web应用部署在一起

  *  SSO 认证中心( 一个CAS Server—独立部署

  2.2  核心票据

    CAS的核心就是其Ticket,及其在Ticket之上的一系列处理操作。CAS的主要票据有TGT、ST、PGT、PGTIOU、PT,其中TGT、ST是CAS1.0(基础模式)协议中就有的票据,PGT、PGTIOU、PT是CAS2.0(代理模式)协议中有的票据。这里主要介绍CAS1.0—基础模式中的几种票据。

  TGT(Ticket Grangting Ticket)

    TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息。用户在CAS认证成功后,生成一个TGT对象,放入自己的缓存(Session);同时,CAS生成cookie(叫TGC,个人理解,其实就是TGT的SessionId),写入浏览器。TGT对象的ID就是cookie的值,当HTTP再次请求到来时,如果传过来的有CAS生成的cookie,则CAS以此cookie值(SessionId)为key查询缓存中有无TGT(Session),如果有的话,则说明用户之前登录过,如果没有,则用户需要重新登录。

  TGC (Ticket-granting cookie)

    上面提到,CAS-Server生成TGT放入自己的Session中,而TGC就是这个Session的唯一标识(SessionId),以Cookie形式放到浏览器端,是CAS Server用来明确用户身份的凭证。(如果你理解Session的存放原理的话就很好理解)

  ST(ServiceTicket)

    ST是CAS为用户签发的访问某一服务票据。用户访问service时,service发现用户没有ST,则要求用户去CAS获取ST。用户向CAS发出获取ST的请求,如果用户的请求中包含cookie,则CAS会以此cookie值为key查询缓存中有无TGT,如果存在TGT,则用此TGT签发一个ST,返回给用户。用户凭借ST去访问service,service拿ST去CAS验证,验证通过后,允许用户访问资源。

为了保证ST的安全性:ST 是基于随机生成的,没有规律性。而且,CAS规定 ST 只能存活一定的时间,然后 CAS Server 会让它失效。而且,CAS 协议规定ST只能使用一次,无论 Service Ticket 验证是否成功, CASServer 都会清除服务端缓存中的该 Ticket ,从而可以确保一个 Service Ticket 不被使用两次。

  2.3  认证过程

  这里用一个终端,对两个CAS—Client的三次请求来说明CAS的认证过程,主要是TGT、TGC、ST等票据的传递,以及如何实现的SSO。

  如下图,前两次请求都是访问的CAS—Client1,主要来说明TGT、TGC、ST等票据的作用;然后第三次请求访问的是CAS—Client2,主要来说明如何实现的SSO。

Request1:

    【第一步】终端第一次访问CAS—Client1,AuthenticationFilter会截获此请求:1、首先,检测本地Session没有缓存有用户信息;2、然后,检测到请求信息中没有ST;3、所以,CAS—Client1将请求重定向到CAS—Server,并传递 Service (也就是要访问的目的资源地址,以便登录成功过后转回该地址),例:【https://cas:8443/cas/login?service=http0%3A8081%2F】

    【第二步】终端第一次访问CAS—Server:1、CAS—Server检测到请求信息中没有TGC,所以跳转到自己的登录页;2、终端输入用户名、密码登录CAS—Server,认证成功后,CAS—Server会生成登录票据—TGT(集成了用户信息与ST),并随机生成一个服务票据—ST与CAS会话标识—TGC。TGT实际上就是Session,而TGC就是这标识这个Session存到Cookie中的SessionID;ST即,根据Service生成Ticket。3、然后,CAS—Server会将Ticket加在url 后面,然后将请求redirect 回客户web 应用,例如URL为【http://192.168.1.90:8081/web1/?ticket=ST-5-Sx6eyvj7cPPCfn0pMZ】

    【第三步】这时,终端携带ticket再次请求CAS—Client1:1、这时客户端的AuthenticationFilter看到ticket 参数后,会跳过,由其后面的TicketValidationFilter 处理;2、TicketValidationFilter 会利用httpclient工具访问cas 服务的/serviceValidate 接口, 将ticket 、service 都传到此接口,由此接口验证ticket 的有效性,即向CAS—Server验证ST的有效性。3、TicketValidationFilter如果得到验证成功的消息,就会把用户信息写入web 应用的session里。至此为止,SSO 会话就建立起来了。

Request2

    上面说了SSO 会话已经建立起来了,这时用户在同一浏览器里第二次访问此web 应用(CAS—Client1)时,AuthenticationFilter会在session 里读取到用户信息,这就代表用户已成功登录,所以就不会去CAS 认证了。

  Request3

    【第一步】与Request1是完全一样的,如下:终端第一次访问CAS—Client2,AuthenticationFilter会截获此请求:1、首先,检测本地Session没有缓存有用户信息;2、然后,检测到请求信息中没有ST;3、所以,CAS—Client1将请求重定向到CAS—Server,并传递 Service (也就是要访问的目的资源地址,以便登录成功过后转回该地址),例:【https://cas:8443/cas/login?service=http0%3A8081%2F】

    【第二步】然后,终端第二次访问CAS—Server:此时,Request中会带有上次生成的TGC,然后根据TGC(SessionID)去查找是否有对应的TGT(Session),如果有,代表此用户已成功登录过,所以此时用户不必再去登录页登录(SSO的体现),而CAS—Server会直接用找到的TGT签发一个ST,然后重定向到CAS—Client2,剩下的如Request1中的【第三步】就完.范例:

在生活中我们也有类似的相关生活经验,例如你去食堂吃饭,食堂打饭的阿姨(www.qiandu.com)告诉你,不收现金。
并且告诉你,你去门口找换票的(passport.com)换小票。
于是你换完票之后,再去找食堂阿姨,食堂阿姨拿着你的票,问门口换票的,这个票是真的吗?换票的说,是真的,于是给你打饭了。
基于上述生活中的场景,我们将基于Cookie的单点登录改良以后的方案如下:

 完成认证登录需经过如下三步:

1. 通过用户名和密码来获取tgt

2. 通过tgt来获取st

3. 最后通过访问带ST的URL完成无密码登录

1.根据http://172.16.18.109/cas/v1/tickets, admin 123456
获得 tgt:
得到:http://172.16.18.109/cas/v1/tickets/TGT-7-BXvYHyND96DzM0ABzSsTUdANlS0Lp0bapCfRPQfL5TTqOFJqxm-cas01.example.org2.根据  tgt获取st
根据:http://172.16.18.109/cas/v1/tickets/TGT-7-BXvYHyND96DzM0ABzSsTUdANlS0Lp0bapCfRPQfL5TTqOFJqxm-cas01.example.org?service=https://172.16.98.109
得到:ST-15-Fr3eZTYL7V1fc5b300sM-cas01.example.org3.尝试st:
https://172.16.18.109/hgCasLogin.do?ticket=ST-15-Fr3eZTYL7V1fc5b300sM-cas01.example.org
https://172.16.18.109/quickcheck/list.do?ticket=ST-15-Fr3eZTYL7V1fc5b300sM-cas01.example.org

三、    总结

    CAS认证过程中的核心概念即是几个【票据】,实际上其实就是1个Cookie和N个Session。包括CAS1.0(基础模式)的TGT、ST、TGC;以及CAS2.0(代理模式)的PGT、PT、PGTIOU等。认证过程,即是这几个票据的传递与对比验证的过程。

深入理解CAS-认证原理相关推荐

  1. 深入理解CAS算法原理

    转载自 深入理解CAS算法原理 1.什么是CAS? CAS:Compare and Swap,即比较再交换. jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法 ...

  2. springboot + springsecurity + cas学习笔记(二)—— CAS认证原理

    CAS,Central Authentication Service-中央认证服务,是Yale 大学发起的一个企业级的.开源的项目,旨在为Web应用系统提供一种可靠的SSO解决方案.下面简单介绍SSO ...

  3. 面试:CAS算法原理

    1.什么是CAS? CAS:Compare and Swap,即比较再交换. jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronou ...

  4. 详细理解 https 单向认证和双向认证原理

    HTTP 简介: HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准.HTTP协议传输的数据都是未加密的,也就是明文的 ...

  5. CAS+SSO原理浅谈

    http://www.cnblogs.com/yonsin/archive/2009/08/29/1556423.html SSO 是一个非常大的主题,我对这个主题有着深深的感受,自从广州 UserG ...

  6. Day241242.单点登录方案【Jwt令牌、sessionredis、CAS认证服务器】 -springsecurity-jwt-oauth2

    1.单点登录与状态共享方案 随着企业的应用规模不断增大,一个单体应用很难满足用户量增长的需求,这就需要我们将单体应用集群化部署,或者将单体应用微服务化.在这个过程中,就涉及到两个问题: 集群应用之间如 ...

  7. Spring Security CAS认证

    13.7 CAS认证 13.7.1概述 JA-SIG生产一种称为CAS的企业级单点登录系统.与其他计划不同,JA-SIG的中央身份验证服务是开源的,广泛使用的,易于理解,独立于平台,并支持代理功能.S ...

  8. CAS认证及代理访问举例

    文章目录 一. CAS简介 二. CAS认证流程 用户首次访问应用app1 第二次访问app1 三. 接入CAS所需配置 pom.xml引入文件配置 application.yml配置 cas相关过滤 ...

  9. CAS SSO 原理 - 基础模式

    对于这个老话题,网上太多的资料,但是要让大家清楚地理解CAS还是不太容易,所以,读了一些文章,并做了一些摘录整理,方便新人理解. 对于CAS登录的过程,下面这段是讲得最清楚的. 登录应用A 主要原理: ...

  10. 深入理解K8S网络原理下

    承接上文深入理解K8S网络原理上 Service 应用是K8s集群内部可见的而我们发布的应用需要外网甚至公网可以访问K8s如何将内部服务暴露出去? 四层网络只有Node节点网络可以对外通讯现在问题是第 ...

最新文章

  1. IT一大道至简: 文章列表
  2. 关于抢红包的_抢红包系统设计与设计
  3. searchindexer.exe占cpu使用率高
  4. ResNet、Faster RCNN、Mask RCNN 是专利算法吗?盘点何恺明参与发明的专利!
  5. C程序100例 第二题
  6. windows 7下不能使用telnet方法
  7. React基础学习笔记
  8. Arthas 实战,助你解决同名类依赖冲突问题
  9. 算法:移除数组中的数字,不用额外空间27. Remove Element
  10. php 判断3g,php 3g{WAp}网站编写注意事项
  11. linux常用命令,亲测可用
  12. Assimp库代码存档
  13. 华为“不造车”的承诺,快到期了
  14. 跨性別/偽娘/性轉漫畫中譯對照
  15. Julia会是超越Python的存在吗
  16. python 坐标轴 单位刻度_Python绘图总结(Matplotlib篇)之坐标轴及刻度
  17. beyond Compare 4免费破解方法
  18. 示波器探头校准-调节补偿电容
  19. 积分制管理系统:员工查看积分和申请非任务积分
  20. android 视频文字提取软件,视频字幕提取神器,你不会还在用手记笔记吧?支持所有视频!...

热门文章

  1. django-查询语句(一)
  2. Ubuntu 14.04 LTS 启动blast2go 报错
  3. 图解通信原理与案例分析-28:四大全球卫星导航系统GNSS的基本原理与技术对比---中国的北斗、美国的GPS、欧洲的伽利略、俄罗斯的格洛纳斯
  4. [随文杂记][转]魔兽争霸vs星际争霸vs红色警戒
  5. 五邑大学、广东工业大学教务系统一键评教代码分享及技术简易剖析
  6. 2016二级java题型分数_2016年英语六级考试题型、试卷结构及分值比例
  7. c语言程序设计教学工作总结,c语言教学的工作总结.docx
  8. 计算机键盘有哪些作用,电脑上的键盘有哪些功能 你不知道的10大键盘功能介绍...
  9. 幻方 java,Java奇数阶幻方实现代码
  10. linux 命令无法Tab补全,命令参数无法补全