CAS 1.0、CAS2.0演示例子(转)

[b]CAS1.0 vs.CAS2.0:[/b]
[list]
[*]CAS1.0也称为基础模式。适用场合:参与SSO的应用[color=red]都为Web应用[/color],且各应用之间[color=red]相互独立[/color],没有复杂的集成关系。
[*]CAS2.0称为[color=red]代理模式[/color]。适用场合:参与SSO的应用存在非Web应用(CAS使用Cookie,故非Web应用不宜于直接做CAS的客户应用),应用之间可以存在集成关系。
[/list]
[b]CAS协议内容[/b]
CAS协议定义了一组术语,一组票据,一组接口。
术语:Client、Server、Service、Proxy、Back-end service(Target service)。
接口:/login、/logout、/validate、/serviceValidate、/proxyValidate、/proxy
票据:TGT、ST、PGT、PGTIOU、PT
[list]
[*]Ticket Grangting Ticket :TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息。当HTTP请求到来时,CAS以此Cookie值为key查询缓存中有无TGT ,如果有的话,则相信用户已登录过。
[*]Service Ticket :ST是CAS为用户签发的访问某一service的票据。用户访问service时,service发现用户没有ST,则要求用户去CAS获取ST。用户向CAS发出获取ST的请求,CAS发现用户有TGT,则签发一个ST,返回给用户。用户拿着ST去访问service,service拿ST去CAS验证,验证通过后,允许用户访问资源。
[*]Proxy Granting Ticket:Proxy Service认证成功后,CAS会生成PGT,并将值回传给Proxy Service 。Proxy Service拿到PGT后,就可以为Target Service做代理,为其申请PT。
[*]Proxy Granting Ticket IOU:PGTIOU是CAS协议中定义的一种附加票据,它增强了传输、获取PGT的安全性。
[*]Proxy Ticket: PT是用户访问Target Serivce的票据。用户经由Proxy Service去CAS获取到PT后,再访问Target Serivce,Target Serivce去CAS验证PT成功后,才允许用户访问。
[/list]
Client、CAS Server、Service三者,是通过各种票据的传递与验证,来实现单点认证功能的。

[b]CAS1.0协议的例子[/b]
场景介绍:
在本演示中,用户先访问广告合同管理系统ADM,去投放广告,之后又去资产系统AMS,查看资产信息。
访问ADM时,用户需要先去CAS登录,之后访问AMS时,就不需再次登录了。
[list]
[*]用户: 早晨第一件事,登录ADM,投放广告!
[*]客户端: 通过浏览器访问ADM网址 http://adm/index.html
[*]ADM: 哈哈,第一次来,我给你redirect到CAS去!
[*]ADM: 通过浏览器redirect到CAS https://cas.company.com/login?[color=red]service=http://adm/index.html[/color]
[*]CAS: 没有传cookie过来?那去登录页面登录吧!
[*]CAS: 返回登录页面给客户端
[*]客户端: 输入用户名/密码 电话密保等信息登录CAS系统
[*]CAS: ok,认证成功,我生成Cookie、TGT、ST。TGT我保存,Cookie,ST返回到浏览器,浏览器可以用ST访问ADM了。
[*]CAS: 写Cookie到浏览器
[*]CAS: 通过浏览器redirect到ADM画面(带ADM服务的ST参数) http://adm/index.html?ticket=[color=red]ST-1-qRPh34B1xhe4dquzz[/color]
[*]ADM: 好,收到ST了,我去CAS验证一下
[*]ADM: 传递参数[color=red]service=http://adm/index.html[/color]及[color=red]ticket=ST-1-qRPh34B1xhe4dquzz[/color]给CAS,请求CAS验证ADM服务的ticket
[*]CAS: ST验证成功,返回用户数据
[*]ADM: 好,我生成用户对象,你可以到投放页面去了!
[*]
[*]用户: 再登录资产系统,看看资产吧!
[*]客户端: 通过浏览器访问AMS网址 http://ams/index.html
[*]AMS: 哈哈,第一次来,没有ST,去CAS申请一个吧!
[*]AMS: 通过浏览器redirect到CAS https://cas.company.com/login?[color=red]service=http://ams/index.html[/color]
[*]CAS: TGC Cookie传过来了,我验证一下是不是我生成的,哦,还真是,那我用TGT签发一个ST,redirect给浏览器吧
[*]CAS: 通过浏览器redirect到AMS画面([color=red]带AMS服务的ST参数[/color]) http://ams/index.html?[color=red]ticket=ST-2-qRPh78V1xhe4dquzz[/color]
[*]AMS: 好,我去CAS验证一下ST
[*]AMS: 传递参数[color=red]service=http://ams/index.html[/color]及[color=red]ticket=ST-2-qRPh78V1xhe4dquzz[/color] 给CAS,请求CAS验证AMS服务的ticket
[*]CAS: ST验证成功,返回用户数据
[*]AMS: OK,你可以查询资产信息了
[*]用户: [color=red]哇,只输入了一次用户名/密码,就访问多个系统,比原来强多了![/color]
[/list]
[b]CAS2.0协议的例子[/b]
场景介绍:
Portal:企业用Portal整合了内部所有系统,员工可以直接登录Portal去查看所有内部系统的信息。
Mail Server:老式C/S结构的邮件服务器。在Portal上线之前,员工只能直接登录Mail Server去管理自己的邮件。
在本演示中,Portal是CAS的Proxy Service, Mail Server是Back-end service(Target service)。Mail Server 需要借助于Portal去登录。
用户登录Portal时,需要去CAS认证,之后[color=red]在Portal上浏览邮件信息时,Portal向CAS为MailServer申请PT,Portal把PT传递给MailServer,然后MailServer去CAS验证PT,验证通过后,MailServer返回邮件信息给Portal[/color],这个过程,无需用户再次登录。
[list]
[*]用户: 早晨第一件事,登录Portal,看看公司动态,顺便看看邮件信息!
[*]客户端: 通过浏览器访问Portal网址 http://portal/
[*]Portal: 哈哈,第一次来,我给你redirect到CAS去!
[*]Portal: 通过浏览器redirect到CAS https://cas.company.com/login?service=http://portal/
[*]CAS: 没有传cookie过来?那去登录页面登录吧!
[*]CAS: 返回登录页面给客户端
[*]客户端: 输入用户名/密码 电话密保等信息登录CAS系统
[*]CAS: ok,认证成功,我生成TGC、TGT、ST,TGT我保存,TGC返回到浏览器、ST redirect回Portal
[*]CAS: 写Cookie到浏览器
[*]CAS: 通过浏览器redirect到Portal画面(带Portal服务的ST参数) http://portal?ticket=ST-1-qRPh34B1xhe4dquzz
[*]Portal: 好,收到ST了,我去CAS验证一下, 顺便把pgtUrl传给它,让它生成代理证PGT并传给我,我可是代理啊
[*]Portal: 传递参数service=http://portal,ticket= ST-1-qRPh34B1xhe4dquzz及pgtUrl给CAS,请求CAS验证Portal服务的ticket并生成PGT
[*]CAS: 使用https协议带参数pgtIou和pgt访问Portal上的代理回调接口pgtUrl,Portal网站保存传递过来的pgt和pgtIou参数
[*]Portal: 代理证传来了,pgt是我的代理证,pgtIou是我取代理证的钥匙[color=blue](要和CAS Response返回的pgtIou比较)[/color]。我要妥善保管!
[*]CAS: 验证ST成功,返回用户数据及pgtIou
[*]Portal: 好,我根据用户数据生成User对象,根据pgtIou取出pgt,放入User对象。我当上代理了!
[*]
[*]用户: 进去portal了,看下邮件吧
[*]客户端: 通过浏览器访问Mail服务网址 http://portal/mail
[*]Portal: MailServer也归CAS管,所以想访问MailServer,必须得为其申请一个PT,我是代理嘛,交给我了!
[*]Portal: 传递pgt和targetService=mailServer给CAS,申请代理服务
[*]CAS: 验证一下代理证pgt,还有targetService,都没问题,好,发放PT
[*]CAS: 传递PT给Portal
[*]Portal: 把PT传给MailServer,让它拿着去到CAS验证吧
[*]Portal: 传递PT和username给MailServer
[*]MailServer: 传递PT和service给CAS,请求CAS验证PT
[*]CAS: PT验证成功,你可以返回数据给Portal了,呵呵
[*]CAS: 验证成功,返回用户数据
[*]MailServer: PT验证通过了,我就答应你的请求,把信息传给Portal吧
[*]MailServer: 返回邮件信息给Portal
[*]用户: 在Portal上看到邮件了,有portal真好,再也不用重新登录Mail服务器去读邮件了。
[/list]

转自:
[url=http://wenku.baidu.com/view/9af2efe29b89680203d82575.html]CAS协议分析[/url]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当客户端应用程序使用CAS 2.0协议从CAS服务器中获取票据(ticket)时,可以使用以下步骤来验证票据并获取用户的属性信息: 1. 客户端应用程序将票据(ticket)发送到CAS服务器,以获取与该票据关联的用户属性信息。 2. CAS服务器验证票据,如果票据有效,则返回与该票据关联的用户属性信息。 3. 客户端应用程序可以解析返回的XML响应,以获取用户属性信息。 以下是一个示例XML响应: ``` <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'> <cas:authenticationSuccess> <cas:user>johndoe</cas:user> <cas:attributes> <cas:firstName>John</cas:firstName> <cas:lastName>Doe</cas:lastName> <cas:email>johndoe@example.com</cas:email> </cas:attributes> </cas:authenticationSuccess> </cas:serviceResponse> ``` 在上面的示例中,`<cas:user>`元素包含与票据关联的用户名,`<cas:attributes>`元素包含其他用户属性信息。 客户端应用程序可以使用以下步骤来解析XML响应: 1. 使用XML解析器解析响应。 2. 使用XPath表达式获取所需的元素和属性。 例如,以下XPath表达式可以用于获取用户名: ``` /cas:serviceResponse/cas:authenticationSuccess/cas:user ``` 类似地,以下XPath表达式可以用于获取用户的电子邮件地址: ``` /cas:serviceResponse/cas:authenticationSuccess/cas:attributes/cas:email ``` 需要注意的是,CAS服务器返回的XML响应中可能包含不同的元素和属性,具体取决于服务器配置和应用程序要求。因此,在实际应用中,需要仔细查看CAS服务器文档,以了解响应中包含的元素和属性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值