总结主要来源于网上的一些文章和论坛的记录以及我自已的一些想法.
CAS (Central Authentication Service) 是 Yale 大学的 ITS 开发的一套 JAVA 实现的开源
的 SSO(single sign-on) 的服务(主要是2.0,到3.0为ja-sig)。
关键字
TGC(ticket-granting cookie)--------- 受权的票据证明
KDC( Key Distribution Center ) ---------- 密钥发放中心
Service ticket(ST) --------- 服务票据, 由 KDC 的 TGS 发放。 任何一台 Workstation 都需要拥有一张有效的 Service Ticket 才能访问域内部的应用 (Applications) 。 如果能正确接收 Service Ticket ,说明在 CASClient-CASServer 之间的信任关系已经被正确建立起来 , 通常为一张数字加密的证书
Ticket Granting tieckt(TGT) --------- 票据授权票据,由 KDC 的 AS 发放。即获取这样一张票据后,以后申请各种其他服务票据 (ST) 便不必再向 KDC 提交身份认证信息 ( 准确术语是 Credentials) 。
authentication service (AS) --------- 认证用服务,索取 Crendential ,发放 TGT
ticket-granting service (TGS) --------- 票据授权服务,索取 TGT ,发放 ST
CAS 单点服务器的认证过程,所有应用服务器收到应用请求后,检查 ST 和 TGT ,如果没有或不对,转到 CAS 认证服务器登陆页面,通过安全认证后得到 ST 和 TGT 再重定向到相关应用服务器,在会话生命周期之内如果再定向到别的应用,将出示
ST 和 TGT 进行认证 , 注意 , 取得 TGT 的过程是通过 SSL 安全协议的 ( 换句话说就是如果不用 ssl 协议 , 每访问一个应用服务,就得重新到认证服务中心认证一次 ) ,关于 SSL 的相关描述可以查看附录 .
白话描述 :
单点登陆 , 无非就是提供给用户一次登陆 , 多个系统共享用户信息的操作 .
这个是怎么操作的呢 ? 有简单的方法 , 当用户访问其他系统的时候 , 写个 URL 带上用户的 ID 和 PASS 提交到相应的系统就可以了 . 这也是一种方法
那 CAS 是怎么操作的呢 ? 或则是 KRB(Kerberos 是一个加密认证协议,允许网络用户不使用明文密码访问服务,一个普通
的协议实现包括 LOGIN 服务存在伪造欺骗对 Key Distribution Center 的响应 。
) 怎么操作的呢 ?
他并不是很复杂 , 他先是建立一个 专门认证用户的 服务 (SERVER) 这个服务只做一件事 , 负责验证用户的 ID 和 PASS 是否是正确 , 在正确的情况提供用户一个名为 TGT 的票据 ,
相当你要去游乐场玩 , 首先你要在门口检查你的身份 ( 即 CHECK 你的 ID 和 PASS), 如果你通过验证 , 游乐场的门卫 (AS) 即提供给你一张门卡 (TGT).
这张卡片的用处就是告诉 游乐场的各个场所 , 你是通过正门进来 , 而不是后门偷爬进来的 , 并且也是获取进入场所一把钥匙 .
好的 , 现在你有张卡 , 但是这对你来不重要 , 因为你来游乐场不是为了拿这张卡的 , 好的 , 我们向你的目的出发 , 恩 , 你来到一个摩天楼 , 你想进入玩玩 ,
这时摩天轮的服务员 (client) 拦下你 , 向你要求摩天轮的 (ST) 票据 , 你说你只有一个门卡 (TGT), 好的 , 那你只要把 TGT 放在一旁的票据授权机 (TGS) 上刷一下 ,
票据授权机 (TGS) 就根据你现在所在的摩天轮 , 给你一张摩天轮的票据 (ST), 哈 , 你有摩天轮的票据 , 现在你可以畅通无阻的进入摩天轮里游玩了 .
当然如果你玩完摩天轮后 , 想去游乐园的咖啡厅休息下 , 那你一样只要带着那张门卡 (TGT). 到相应的咖啡厅的票据授权机 (TGS) 刷一下 , 得到咖啡厅的票据 (ST) 就可以进入咖啡厅
当你离开游乐场后 , 想用这张 TGT 去刷打的回家的费用 , 呵呵 , 对不起 , 你的 TGT 已经过期了 , 在你离开游乐场那刻开始 , 你的 TGT 就已经销毁了 ~
Yale CAS Server 的配置过程
CAS (Central Authentication Service) 是 Yale 大学的 ITS 开发的一套 JAVA 实现的开源
的 SSO(single sign-on) 的服务。该服务是以一个 java web app(eg:cas.war) 来进行服务的,
使用时需要将 cas.war 发布到一个 servlet2.3 兼容的服务器上,并且服务器需要支持 SSL ,
在需要使用该服务的其他服务器(客户),只要进行简单的配置就可以实现 SSO 了。
CAS 的客户端可以有很多种,因为验证的结果是以 XML 的格式返回的, CAS 的客户端已
打包进去的有 java,perl,python,asp,apache module 等好几种客户端示例,你还可以根据
需要实现一个自己的客户端,非常简单 !~