Yale CAS(耶鲁集中认证服务)简介
2012-07-13 12:07:28 来源:我爱运维网 评论:0 点击:372198
CAS(Central Authentication Service)是Yale大学发起的一个开源项目(http://www.jasig.org/cas),为Web应用提供了单点登录(SSO)支持。CAS...
id="iframeu944267_0" src="http://pos.baidu.com/rcpm?rdid=944267&dc=2&di=u944267&dri=0&dis=0&dai=2&ps=591x215&dcb=BAIDU_SSP_define&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1478494283461&ti=Yale%20CAS(%E8%80%B6%E9%B2%81%E9%9B%86%E4%B8%AD%E8%AE%A4%E8%AF%81%E6%9C%8D%E5%8A%A1)%E7%AE%80%E4%BB%8B%20-%20SSO%E7%B3%BB%E7%BB%9F%20-%20%E6%88%91%E7%88%B1%E8%BF%90%E7%BB%B4%5B5iOPS%5D&ari=2&dbv=2&drs=1&pcs=1348x768&pss=1348x873&cfv=0&cpl=5&chi=1&cce=true&cec=UTF-8&tlm=1342152678&rw=768<u=http%3A%2F%2Fwww.5iops.com%2Fhtml%2F2012%2Fsso_0713%2F181.html<r=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D-PGBPFct-AZODL-lcoSFsT6r9v91D1plNgQxPDYaqnFmDuIpZUcuuAhpLgidFHA9CY6UgWDfiYl6dKjeiOjeeK%26wd%3D%26eqid%3Da40d40ea00069ce7000000055820082b&ecd=1&psr=1920x1080&par=1920x1040&pis=-1x-1&ccd=24&cja=false&cmi=7&col=zh-CN&cdo=-1&tcn=1478494284&qn=ffdeb3c1074f0863&tt=1478494283429.112.179.180" width="250" height="250" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;">
其主要特点是:
- 支持跨域的web应用SSO
- CAS Server内置支持多种常见验证后端,比如Windows AD, LDAP, JDBC等; (详见 https://wiki.jasig.org/display/CASUM/Authentication),也可以自己根据需要扩展验证方式;
- 支持将用户认证状态信息存放到TicketRegistry并被多个CAS Server Instance共享,为高可用性提供了可能;
- 内置了Services Management管理界面,可以控制允许用户访问的services和各项Services可以访问的用户属性;
- Client端有官方对于主流web编程语言Java, PHP, .net的支持,同时有大量第三方开源client支持几乎所有主流web开发语言;( https://wiki.jasig.org/display/CASC/Home)
由于CAS是纯Web SSO,因此不能满足桌面应用的SSO需求。
Yale CAS的基本原理是通过安插在web应用的client端用来截获认证请求,将用户重定向到CAS Server,由CAS Server做用户的统一认证和对web应用访问的授权。
以下是CAS基础的工作模式流程图:

参照上图,一个基本的用户认证流程是:
- 用户浏览器访问web应用 http://helloservice, CAS Client会截获用户认证请求;
- CAS Client将用户重定向到CAS Server,并再URL中注明用户访问的service名称,即service=helloservice;
- CAS Server查看用户的cookie中是否有Ticket Granting Ticket(TGT):
- 如果已有TGT,则说明用户已经登陆过,不需要再登录,因此直接为用户访问的Service颁发一个Service Ticket (ST);
- 如果没有TGT,则给出用户登录界面,让用户输入用户名和密码,验证Credential后决定是否颁发TGT,直到决定是否颁发ST;
- 用户被重定向回web应用,并再url中携带service和ST信息;
- web应用中的CAS Client向CAS Server验证Service和ST的有效性;
- 如果ST有效,CAS Server象Client返回用户的身份。
因此web应用本身不需要保存用户credential的信息,所有用户认证都是在CAS Server端完成的。
在整个验证流程中, Service Ticket在使用一次以后就过期,因此CAS Server和CAS Client之间可以不用采用SSL连接。 但是CAS Server给用户浏览器颁发的TGT是有有效期的(默认2小时),所以CAS Server一般被配置成https从而保证TGT在发给用户浏览器的过程中的
安全性。
对于更复杂的认证场景,比如用户==>service1==>serivce2,CAS还提供了Proxy认证机制,即CAS Client可以代理用户去访问其他WEB应用。 这种模式目前超出了我们的应用范围,因此不做深入研究。