`
1qqqqqq
  • 浏览: 43292 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CAS 的基本协议框架

    博客分类:
  • SSO
阅读更多
1. SSO 原理浅谈
       SSO 是一个非常大的主题,我对这个主题有着深深的感受,自从广州 UserGroup 的论坛成立以来,无数网友都在尝试使用开源的 CAS , Kerberos 也提供另外一种方式的 SSO ,即基于 Windows 域的 SSO ,还有就是从 2005 年开始一直兴旺不衰的 SAML 。

       如果将这些免费的 SSO 解决方案与商业的 Tivoli 或 Siteminder 或 RSA Secure SSO 产品做对比,差距是存在的。毕竟,商业产品的安全性和用户体验都是无与伦比的,我们现在提到的 SSO ,仅仅是 Web SSO ,即 Web-SSO 是体现在客户端;另外一种 SSO 是桌面 SSO ,例如,只需要作为 Administrator 登录一次 windows 2000 ,我便能够在使用 MSN/QQ 的时候免去登录的环节 ( 注意,这不是用客户端软件的密码记忆功能 ) ,是一种代理用户输入密码的功能。因此,桌面 SSO 是体现在 OS 级别上。

       今天,当我们提起 SSO 的时候,我们通常是指 Web SSO ,它的主要特点是, SSO 应用之间走 Web 协议 ( 如 HTTP/SSL) ,并且 SSO 都只有一个登录入口。

       简单的 SSO 的体系中,会有下面三种角色:

       1 , User (多个)

       2 , Web 应用(多个)

       3 , SSO 认证中心( 1 个)

       虽然 SSO 实现模式千奇百怪,但万变不离其宗:

l         Web 应用不处理 User 的登录,否则就是多点登陆了,所有的登录都在 SSO 认证中心进行。

l         SSO 认证中心通过一些方法来告诉 Web 应用当前访问用户究竟是不是张三 / 李四。

l         SSO 认证中心和所有的 Web 应用建立一种信任关系, SSO 认证中心对用户身份正确性的判断会通过某种方法告之 Web 应用,而且判断结果必须被 Web 应用信任。

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

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

2.1 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 协议能够适合任何语言编写的客户端应用。

2.2 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 的基本协议框架:

2.1.1 基础协议



                                                 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 的用户进行服务。

2.2.2 CAS 如何实现 SSO

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

http://www.blogjava.net

http://www.matrix.org.cn

http://www.csdn.net

如果通过 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 ,然后做下面的事情:

1,              如果 User 的持有 TGC 且其还没失效,那么就走基础协议图的 Step4 ,达到了 SSO 的效果。

2,              如果 TGC 失效,那么用户还是要重新认证 ( 走基础协议图的 Step3) 。
  • 描述: CAS 的基本协议框架
  • 大小: 84.4 KB
分享到:
评论

相关推荐

    用CAS实现框架的SSO单点登录

    ### 用CAS实现框架的SSO单点登录 #### SSO单点登录概念与原理 SSO(Single Sign-On)即单点登录技术,是一种让用户只需登录一次即可访问多个关联应用的技术。它不仅提升了用户体验,同时也加强了系统的安全性。...

    集成cas实现单点登录认证.zip

    本压缩包"集成cas实现单点登录认证.zip"显然包含了关于如何使用CAS(Central Authentication Service)框架集成SSO认证的资源。下面我们将详细探讨相关的知识点。 1. CAS简介:CAS是耶鲁大学开源的一个Web应用的...

    CAS 框架 SSO的实现.pdf

    #### 二、CAS的基本原理 CAS(Central Authentication Service)是由耶鲁大学发起的一个构建Web SSO的Java开源项目。它提供了一种简单而灵活的方式来实现SSO功能。 - **CAS的结构体系** - **CASServer**:负责...

    cas client增加stucts框架 服务端返回用户其它信息

    在IT行业中,CAS(Central Authentication Service)是一种广泛使用的开源单点登录(Single Sign-On, SSO)协议,它为各种应用程序提供了统一的认证服务。在本项目中,我们讨论的主题是如何在CAS客户端集成Structs...

    cas-overlay-template-5.3

    在实际使用"cas-overlay-template-5.3"时,开发者需要理解CAS的基本原理和配置文件结构,以便正确配置服务端点、认证策略、服务定义等。同时,还需要关注CAS的官方文档和社区,以获取最新的安全更新和功能增强。在...

    CAS单点登录多语言整合文档+源码

    首先,我们来深入理解一下CAS的基本工作原理。当用户尝试访问受CAS保护的应用时,会被重定向到CAS服务器进行身份验证。如果用户已经通过了CAS的身份验证,那么他们可以无缝地访问其他受保护的应用,因为CAS会记住...

    Cas5.2.6(cas-overlay-template-5.2.6)服务端

    CAS(Central Authentication Service)是一种广泛使用的开放源码身份验证框架,它允许用户通过单一登录(Single Sign-On,SSO)访问多个应用系统。在你提供的资料中,"Cas5.2.6(cas-overlay-template-5.2.6)服务端...

    cas .net客户端的配置代码

    在.NET开发环境中,CAS(Central Authentication Service)是一种广泛使用的单点登录(Single Sign-On, SSO)框架。本文将深入探讨如何配置CAS .NET客户端,以及解决“循环重定向”问题,以帮助开发者更好地理解这一...

    CAS自定义加密和登录验证

    CAS(Central Authentication Service,中央认证服务)是一种广泛使用的开源身份验证框架,主要用于实现单点登录(Single Sign-On,SSO)。在本主题中,我们将深入探讨如何在CAS中进行自定义加密和登录验证。 首先...

    springboot+security+cas集成demo

    CAS协议是基于服务器/客户端模式的,主要涉及的服务有CAS服务器、CAS客户端、用户代理(浏览器)以及应用服务。 "springboot+security+cas集成demo"的目的是展示如何在Spring Boot应用中集成Spring Security和CAS,...

    CAS单点登录系统.doc

    CAS的基本协议流程如下: 1. 用户尝试访问受保护的Web资源时,CAS Client会检查HTTP请求中是否包含了Service Ticket。 2. 如果没有Service Ticket,则说明用户尚未通过认证,此时CAS Client会将请求重定向到CAS ...

    cas client

    CAS(Central Authentication Service)客户端是一种身份验证框架,用于实现单点登录(Single Sign-On, SSO)。这个Web工程提供了一个简单且完整的CAS客户端实现,旨在帮助开发者快速搭建和部署一个可以与CAS服务器...

    CAS4.2.7文档 html版本

    CAS(Central Authentication Service)是一种开源的单点登录(Single Sign-On,SSO)框架,它主要用于提供统一的身份验证服务,使得用户只需要一次登录就能访问多个应用系统。CAS4.2.7是CAS的一个特定版本,此版本...

    cas client springmvc(springmvc cas maven sso 详解 )

    本篇文章将深入探讨如何在SpringMVC框架下配置和使用CAS客户端,以及整合Hibernate数据持久化库。 首先,我们需要理解SSO的基本工作原理。SSO的核心是中央认证服务器(CAS Server),它负责处理所有用户的登录请求...

    cas-overlay-template-6.1 服务端代码

    CAS(Central Authentication Service)是一种广泛使用的开放源码身份验证框架,它允许用户通过单一登录(Single Sign-On,SSO)访问多个应用系统。在本文中,我们将深入探讨"cas-overlay-template-6.1 服务端代码...

    单点登入--CAS3.0

    CAS3.0是其较早的一个稳定版本,虽然现在已经有了更新的版本,但理解CAS3.0的基本工作原理对于学习SSO系统设计至关重要。 **CAS3.0的工作流程:** 1. **用户请求服务**:用户尝试访问受CAS保护的应用系统,如博客...

    acegi安全策略与CAS整合

    适合对AceGI和CAS有基本认识,需要在项目中实现安全策略整合的开发人员和系统架构师。 0.4 参考文献: 建议读者参考官方文档和社区论坛,以获取最新的技术和问题解决方案。 0.5 术语与缩写解释: - AceGI:AceGi ...

    使用 CAS 在 Tomcat6 中实现单点登录

    总结来说,实现使用CAS在Tomcat6中进行单点登录,需要理解SSO的基本概念,熟悉CAS的工作原理和协议流程,掌握CAS Server的部署和配置,以及CAS Client在Tomcat中的集成。通过这些步骤,可以构建一个安全且方便的单点...

    cas_server4.1.2

    3. **认证机制**:CAS支持多种认证协议,如LDAP、数据库、Active Directory等。根据组织的用户存储,选择合适的认证策略并在配置文件中进行设置。 4. **票证验证**:CAS通过票证(Ticket)系统来实现SSO。当用户...

Global site tag (gtag.js) - Google Analytics