基本概念

单点登录SSO ,是目前比较流行的企业业务整合的解决方案之一。
SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
 CAS(Centeral Authentication Service) 中央认证服务。
(CAS Central Authentication Service)是一款不错的针对Web应用的单点登录框架
单点登录SSO ,是目前比较流行的企业业务整合的解决方案之一。
 SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
CAS(Centeral Authentication Service) 中央认证服务。
(CAS Central Authentication Service)是一款不错的针对Web应用的单点登录框架
基本术语
TGT(Ticket Granging Ticket)
TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。
TGT封装了Cookie值以及此Cookie值对应的用户信息。
用户在CAS认证成功之后,CAS生成cookie(叫TGC),写入浏览器,同时生成一个TGT对象放入自己的缓存,TGT对象的ID就是cookie的值。
当HTTP再次请求到来时,如果传来的有CAS生成的cookie,则CAS以此cookie值为key查询缓存中有无TGT,如果有的话则说明用户之前登录过,如果没有,则需要用户重新登录。 TGC(Ticket Granting cookie)
存放用户身份认证凭证的cookie,在浏览器和CAS Server间通讯时使用,并且只能基于安全通道传输(Https)是CasServer用来明确用户身份的凭证。
ST(Service ticket)
服务票据,服务的唯一标识码,有CASServer发出(Http传送),用户访问Service时,service发现用户没有st,则要求用户去CAS获取ST。
用户向CAS发出获取ST的请求,CAS发现用户有TGT,则签发一个ST,返回给用户,用户拿着ST去访问service,service拿ST去CAS验证,验证通过后,允许用户访问资源。
   服务票据,服务的唯一标识码,有CASServer发出(Http传送),用户访问Service时,service发现用户没有st,则要求用户去CAS获取ST。
   用户向CAS发出获取ST的请求,CAS发现用户有TGT,则签发一个ST,返回给用户,用户拿着ST去访问service,service拿ST去CAS验证,验证通过后,允许用户访问资源。
TGT(Ticket Granging Ticket)
  TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。
  用户在CAS认证成功之后,CAS生成cookie(叫TGC),写入浏览器,同时生成一个TGT对象放入自己的缓存,TGT对象的ID就是cookie的值。
  当HTTP再次请求到来时,如果传来的有CAS生成的cookie,则CAS以此cookie值为key查询缓存中有无TGT,如果有的话则说明用户之前登录过,如果没有,则需要用户重新登录。
TGC(Ticket Granting cookie)
  存放用户身份认证凭证的cookie,在浏览器和CAS Server间通讯时使用,并且只能基于安全通道传输(Https)是CasServer用来明确用户身份的凭证。
结构上看CAS包含两部分
CAS Server
CASServer 负责完成对用户的认证工作,需要独立部署,CASServer会处理用户名/密码等凭证(Credentials)
CAS Client
负责处理对客户端受保护资源的访问请求,需要对请求方进行身份认证时,重定向到CAS Server进行认证。
原则上,客户端应用不再接受任何的用户名密码等 Credentials)
CASClient 与受保护的客户端应用部署在一起,以Filter方式保护的资源。
 
CAS Server
  CASServer 负责完成对用户的认证工作,需要独立部署,CASServer会处理用户名/密码等凭证(Credentials)
CAS Client
  负责处理对客户端受保护资源的访问请求,需要对请求方进行身份认证时,重定向到CAS Server进行认证。
  原则上,客户端应用不再接受任何的用户名密码等 Credentials)

  CASClient 与受保护的客户端应用部署在一起,以Filter方式保护的资源。
CAS最基本的协议过程
 
CAS Client 与受保护的客户端应用部署在一起,以Filter方式保护Web应用受保护资源,过滤从客户端过来的每一个Web请求。
1)(step1) web浏览器访问CAS Client,无session并且无票据ST,定向到CASServer(step 2),又因为浏览器中并没有cookie,故服务器端拿不到TGC,因此需要重新登录。
2)(step3) 是用户认证过程,如果用户提供了正确的CASServer会处理用户名、密码等凭证(Credentials),认证成功后,CAS生成cookie(叫TGC),写入浏览器,同时生成一个TGT对象,再根据TGT发放票据ST,并且重定向用户到CAS Client(附带刚才产生的Service Ticket),Service Ticket是不可伪造的(strp4)
3) (step5) 拿着ST 去CAS Service验证一下,验证成功后返回用户信息(step6)
ps: 收到ST后,为什么还要验证过呢?
因为CAS知道这个用户已经登陆过,但是对于这个项目来说,我并不知道这个用户已经登陆过了,故需要验证
4)当用户访问另一个应用的服务再次被重定向到CAS Service的时候,CAS Server会主动获取这个TGC cookie 然后做下面的事情
  1. 如果User持有TGC且其还没有失效,那么久走基础协议图的Step4,达到了SSO的效果
  2. 如果TGC失效了,那么用户还是要重新认证(走基础协议图的step3)
CAS请求认证时序图
        
CAS服务器端登录时处理
第一步:cas往浏览器增加cookie(TGC)
CAS 向浏览器送回一个所谓的内存cookie,这种cookie并不真的保存在内存中,而只是浏览器一关闭,cookie就自动过期。这个cookie称为"ticket-grantingcookie",用来表明用户已经成功的登录过。
这个cookie是一个加密的cookie,其中保存了用户登录的信息。用户以后其他应用客户端登录。
第二步:cas同时创建了一个ticket(ST)重定向到原来的cas客户端
认证成功后,CAS服务器创建一个很长的,随机生成的字符串,称谓"Ticket"。随后,CAS将这个ticket和成功登录的用户,以及服务联系在一起。这个ticket是一次性使用的一种凭证,它只对登录成功的用户机器服务使用一次。使用过以后立即失效。
CAS客户端应用A的处理
第一步:收到ticket后,向cas提交验证ticket
第二步:ticket验证后创建session
以后登录此应用时,没有ticket,但IE能提供session,从session中取得CASReceipt,并验证如果有效说明已经在此应用认证过,允许访问此应用。
到此为止,CAS会记录用户已在应用A登录。
用户登录到应用B是如果处理
用户进入应用B时,首先仍然会重定向到CAS服务器。不过此时CAS服务器不再要求用户输入用户名和密码,而是首先自动寻找Cookie,根据Cookie中保存的信息,进行登录。然后,CAS同样给出新的ticket重定向应用B给cas验证(流程同应用A的验证方式)如果验证成功则应用B创建session记录CASReceipt信息到session中,以后凭此session登录应用B。
原理: 1一个cookie+N个session
CAS创建cookie在所有应用中登录时cas使用,各应用通过在IE创建各自的session来标识应用是否已经登录。
cookie,在cas为各应用登录时使用,实现了只须一次录入用户密码
session:各个应用会创建自己的session标识是否登录
 
具体描述一下客户端消息流程
1 第一次访问http://localhost:8080/a
  client:没有票据且session中没有消息所以跳转到CAS
  cas:拿不到tgc故要求用户登录
2 认证成功后回调
  cas:通过TGT生成ST发给客户端,客户端保存TGC,并重定向到http://localhost:8080/a
  client: 带有票据(ST),所以不跳转只是后台发给CAS验证票据(浏览器无法看到)
3 第一次访问http://localhost:8080/b
  client:没有票据且Session中没有消息所以跳转至CAS
  cas: 从客户端提取TGC,如果TGC有效则给用户ST并后台验证ST,从而sso。【如果失效重登录或注销时,怎么通知其他系统更新SESSION消息呢??TicketGrantingTicketImpl类grantServiceTicket方法里this.services.put(id,service);可见CAS端已经记录了当前登录的子系统】  如下单点退出
4)再次访问http://localhost:8080/a
client:没有票据但是session中有消息故不跳转,也不用发cas验证票据,允许用户访问。
 
 
 
 
 
 

SSO-CAS单点登录的更多相关文章

  1. SSO之CAS单点登录实例演示

    本文目录: 一.概述 二.演示环境 三.JDK安装配置 四.安全证书配置 五.部署CAS-Server相关的Tomcat 六.部署CAS-Client相关的Tomcat 七. 测试验证SSO 一.概述 ...

  2. SSO之CAS单点登录详细搭建教程

    本教程是我个人编写,花费几个小时的时间,给需要学习的人员学习使用,希望能帮助到你们. [环境说明]:本文演示过程在同一个机器上的(也可以在三台实体机器或者三个的虚拟机上),环境如下: windows7 ...

  3. CAS单点登录(SSO)完整教程

    转:http://blog.csdn.net/frinder/article/details/7969925 CAS单点登录(SSO)完整教程(2012-02-01更新) 一.教程说明 前言 教程目的 ...

  4. cas 单点登录(SSO)实验之二: cas-client

    cas 单点登录(SSO)实验之二: cas-client 参考文章: http://my.oschina.net/indestiny/blog/200768#comments http://wenk ...

  5. cas 单点登录(SSO)之一: jasig cas-server 安装

    cas 单点登录(SSO)实验之一: jasig cas-server 安装 参考文章: http://my.oschina.net/indestiny/blog/200768#comments ht ...

  6. cas 单点登录(SSO)之中的一个: jasig cas-server 安装

    cas 单点登录(SSO)实验之中的一个: jasig cas-server 安装 參考文章: http://my.oschina.net/indestiny/blog/200768#comments ...

  7. CAS单点登录(一)——初识SSO

    转载:https://blog.csdn.net/Anumbrella/article/details/80821486 一.初识CAS 首先我们来说一下CAS,CAS全称为Central Authe ...

  8. CAS单点登录(SSO)服务端的部署和配置---连接MySQL进行身份认证

    一.修改系统host,加入 127.0.0.1 server.test.com127.0.0.1 client1.test.com127.0.0.1 client2.test.com 二.安装grad ...

  9. SSO单点登录系列5:cas单点登录增加验证码功能完整步骤

    本篇教程cas-server端下载地址:解压后,直接放到tomcat的webapp目录下就能用了,不过你需要登录的话,要修改数据源,C:\tomcat7\webapps\casServer\WEB-I ...

  10. CAS单点登录之mysql数据库用户验证及常见问题

    前面已经介绍了CAS服务器的搭建,详情见:搭建CAS单点登录服务器.然而前面只是简单地介绍了服务器的搭建,其验证方式是原始的配置文件的方式,这显然不能满足日常的需求.下面介绍下通过mysql数据库认证 ...

随机推荐

  1. 20145330 《网络对抗》 Eternalblue(MS17-010)漏洞复现与S2-045漏洞的利用及修复

    20145330 <网络对抗> Eternalblue(MS17-010)漏洞利用工具实现Win 7系统入侵与S2-045漏洞的利用及修复 加分项目: PC平台逆向破解:注入shellco ...

  2. Python 开发环境搭建

    Python分别有两个大的版本,分别是2和3 下载地址:Python-3.6.2   Python-2.7.13 现在安装路径:D:\Program Files\Python 安装完成以后要安装 pi ...

  3. 【基础配置】Dubbo的配置及使用

    1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...

  4. Leetcode——Target Sum

    Question You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you ha ...

  5. jquery.cookie.js中$.cookie() 使用方法

    定义:让网站服务器把少量数据储存到客户端的硬盘或内存,从客户端的硬盘读取数据的一种技术: 下载与引入:jquery.cookie.js基于jquery:先引入jquery,再引入:jquery.coo ...

  6. js中可以直接使用id而不用获取id

    先来看一个例子: 不获取 id 也可以使用 id 元素. <!-- Author: XiaoWen Create a file: 2017-01-11 13:58:01 Last modifie ...

  7. MUI --- h.js无效

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. Codeforces Beta Round #17 A.素数相关

    A. Noldbach problem Nick is interested in prime numbers. Once he read about Goldbach problem. It sta ...

  9. linux下带有空格的文件怎么删除

    如:hello world文件 第一种方式 先用 ls -i 得到 hello world 的inod(就是最前面的数字)假设这个数字是123,然后find . -inum -exec rm {} \ ...

  10. 【转】xml节点解析成字符串的方法

    网址:http://blog.csdn.net/shanzhizi/article/details/8817532 ZC: 这是 libxml2的 之前汇总了一篇关于xml文档与字符串转换的文章,文章 ...