Yale CAS实现原理及其基础协议

本文介绍了CAS(Central Authentication Service)单点登录系统的运作原理及安全性分析。CAS由Yale大学发起,广泛应用于Java项目的Web SSO中。文章详细阐述了CAS的组成部分CASServer和CASClient的功能,并解释了CAS是如何通过Ticket Granting Ticket (TGT) 和 Service Ticket (ST) 实现用户认证和SSO的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来自 http://3705.blogbus.com/logs/4435864.html

 

参考 http://www.cnblogs.com/shanyou/archive/2009/07/14/1523671.html

 

 

CAS(Central Authentication Service) Yale 大学发起的一个开源项目,据统计,大概每 10 个采用开源构建 Web SSO Java 项目,就有 8 个使用 CAS 。对这些统计,我虽然不以为然,但有一点可以肯定的是, CAS 是我认为最简单实效,而且足够安全的 SSO 选择。

 

       本节主要分析 CAS 的安全性,以及为什么 CAS 被这样设计,带着少许密码学的基础知识,我希望有助于读者对 CAS 的协议有更深层次的理解。

 

从结构体系看, CAS 包含两部分:

 

l         CAS Server

 

CAS Server 负责完成对用户的认证工作, CAS Server 需要独立部署,有不止一种 CAS Server 的实现, Yale CAS Server ESUP CAS Server 都是很不错的选择。

 

CAS Server 会处理用户名 / 密码等凭证 (Credentials) ,它可能会到数据库检索一条用户帐号信息,也可能在 XML 文件中检索用户密码,对这种方式, CAS 均提供一种灵活但同一的接口 / 实现分离的方式, CAS 究竟是用何种认证方式,跟 CAS 协议是分离的,也就是,这个认证的实现细节可以自己定制和扩展。

 

l         CAS Client

 

CAS Client 负责部署在客户端(注意,我是指 Web 应用),原则上, CAS Client 的部署意味着,当有对本地 Web 应用的受保护资源的访问请求,并且需要对请求方进行身份认证, Web 应用不再接受任何的用户名密码等类似的 Credentials ,而是重定向到 CAS Server 进行认证。

 

目前, CAS Client 支持(某些在完善中)非常多的客户端,包括 Java .Net ISAPI Php Perl uPortal Acegi Ruby VBScript 等客户端,几乎可以这样说, CAS 协议能够适合任何语言编写的客户端应用。

 

 剖析协议就像剖析设计模式,有些时候,协议让人摸不着头脑。 CAS 的代理模式要相对复杂一些,它引入了一些新的概念,我希望能够在这里描述一下其原理,有助于读者在配置和调试 CAS SSO 有更清晰的思路。

 

如果没记错, CAS 协议应该是由 Drew Mazurek 负责可开发的,从 CAS v1 到现在的 CAS v3 ,整个协议的基础思想都是基于 Kerberos 的票据方式。

 

       CAS v1 非常原始,传送一个用户名居然是 ”yes/ndavid.turing” 的方式, CAS v2 开始使用了 XML 规范,大大增强了可扩展性, CAS v3 开始使用 AOP 技术,让 Spring 爱好者可以轻松配置 CAS Server 到现有的应用环境中。

 

CAS 是通过 TGT(Ticket Granting Ticket) 来获取 ST(Service Ticket) ,通过 ST 来访问服务,而 CAS 也有对应 TGT ST 的实体,而且他们在保护 TGT 的方法上虽然有所区别,但是,最终都可以实现这样一个目的——免去多次登录的麻烦。

 

       下面,我们看看 CAS 的基本协议框架:

 

基础协议

 

cas_protocol-1.jpg 
                                                 

                                                 CAS
基础模式

 

       上图是一个最基础的 CAS 协议, CAS Client Filter 方式保护 Web 应用的受保护资源,过滤从客户端过来的每一个 Web 请求,同时, CAS Client 会分析 HTTP 请求中是否包请求 Service Ticket( 上图中的 Ticket) ,如果没有,则说明该用户是没有经过认证的,于是, CAS Client 会重定向用户请求到 CAS Server Step 2 )。 Step 3 是用户认证过程,如果用户提供了正确的 Credentials CAS Server 会产生一个随机的 Service Ticket ,然后,缓存该 Ticket ,并且重定向用户到 CAS Client (附带刚才产生的 Service Ticket ), Service Ticket 是不可以伪造的,最后, Step 5 Step6 CAS Client CAS Server 之间完成了一个对用户的身份核实,用 Ticket 查到 Username ,因为 Ticket CAS Server 产生的,因此,所以 CAS Server 的判断是毋庸置疑的。

 

       该协议完成了一个很简单的任务,就是 User(david.turing) 打开 IE ,直接访问 helloservice 应用,它被立即重定向到 CAS Server 进行认证, User 可能感觉到浏览器在 helloservcie casserver 之间重定向,但 User 是看不到, CAS Client CAS Server 相互间的 Service Ticket 核实 (Validation) 过程。当 CAS Server 告知 CAS Client 用户 Service Ticket 对应确凿身份, CAS Client 才会对当前 Request 的用户进行服务。

 

CAS 如何实现 SSO

 

       当我们的 Web 时代还处于初级阶段的时候, SSO 是通过共享 cookies 来实现,比如,下面三个域名要做 SSO

 

http://www.blogjava.net

 

http://www.matrix.org.cn

 

http://www.youkuaiyun.com

 

如果通过 CAS 来集成这三个应用,那么,这三个域名都要做一些域名映射,

 

http://blogjava.cas.org

 

http://matrix.cas.org

 

http://csdn.cas.org

 

因为是同一个域,所以每个站点都能够共享基于 cas.org cookies 。这种方法原始,不灵活而且有不少安全隐患,已经被抛弃了。

 

CAS 可以很简单的实现跨域的 SSO ,因为,单点被控制在 CAS Server ,用户最有价值的 TGC-Cookie 只是跟 CAS Server 相关, CAS Server 就只有一个,因此,解决了 cookies 不能跨域的问题。

 

回到 CAS 的基础协议图,当 Step3 完成之后, CAS Server 会向 User 发送一个 Ticket granting cookie (TGC) User 的浏览器,这个 Cookie 就类似 Kerberos TGT ,下次当用户被 Helloservice2 重定向到 CAS Server 的时候, CAS Server 会主动 Get 到这个 TGC cookie ,然后做下面的事情:

 

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在C#开发中,Windows Media Player控件是集成音频和视频播放功能的强大工具。本文将介绍如何在C#中实现不同的播放模式,如随机播放、列表循环和单曲循环,这些功能在多媒体应用中十分常见 。 要使用Windows Media Player控件,首先需要将其添加到C#项目中。在Visual Studio中,可以通过在工具箱中搜索“Windows Media Player”,并将其拖放到窗体上完成 。接着,设置控件的基本属性,如URL,以指定要播放的媒体文件 。 随机播放模式会在一首歌曲播放结束后,随机选择播放列表中的下一首歌曲。可以通过创建一个包含所有歌曲URL的数组,并利用Random类生成随机索引来实现。例如: 列表循环模式会在一首歌曲播放结束后,自动从播放列表的开头重新开始播放。实现方法是检测到播放结束后,将URL重置为列表的第一个元素: 单曲循环模式则是在一首歌曲播放结束后,重新播放当前歌曲。可以通过将播放器的当前播放位置重置为0并重新播放来实现: 以上代码均需在windowsMediaPlayer1_PlayStateChange事件处理器中实现,该事件会在播放器的播放状态改变时触发 。需要注意的是,这些示例假设已正确引用了WMPLib命名空间,并且Windows Media Player控件的ID为“windowsMediaPlayer” 。 在实际应用中,除了实现播放模式外,还可能需要考虑错误处理、用户界面更新等因素。为了使播放列表更具动态性,可以考虑从数据库或XML文件加载歌曲信息,而不是硬编码在代码中,从而提升用户体验 。通过这些方法,可以在C#中灵活实现Windows Media Player的各种播放模式,满足不同多媒体应用场景的需求 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值