Skip to main content

CAS协议

CAS是Central Authentication Service的缩写,中央认证服务,一种独立开放指令协议。CAS 是 耶鲁大学(Yale University)发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。

流程图

CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。

对于访问受保护资源的每个 Web 请求,CAS Client 会分析该请求的 Http 请求中是否包含 Service Ticket,如果没有,则说明当前用户尚未登录,于是将请求重定向到指定好的 CAS Server 登录地址,并传递 Service (也就是要访问的目的资源地址),以便登录成功过后转回该地址。

用户输入认证信息,如果登录成功,CAS Server 随机产生一个相当长度、唯一、不可伪造的 Service Ticket,并缓存以待将来验证,之后系统自动重定向到 Service 所在地址,并为客户端浏览器设置一个 Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新产生的 Ticket 过后,在第 5 步中与 CAS Server 进行身份验证,以确保 Service Ticket 的合法性。

在该协议中,所有与 CAS 的交互均采用 SSL 协议,确保 ST 和 TGC 的安全性。协议工作过程中会有 2 次重定向的过程,但是 CAS Client 与 CAS Server 之间进行 Ticket 验证的过程对于用户是透明的。

CAS(标准)协议常用接口

CAS2.0协议采用XML进行认证,认证流程和CAS1.0总体一致,在认证的URI上有变化,CAS2.0主要提供的URI包括以下:

  • /login(GET)

  • /serviceValidate

1.1 /login (GET)

登录接口用于实现用户的身份认证。客户端向CAS服务器发送登录请求,CAS服务器返回一个票证(ticket),客户端使用该票证即可登录到目标应用系统。 参数:

名称必填备注
serviceservice参数表示目标应用系统的URL地址,用于在登录成功后重定向到目标应用系统。

示例:

https://server/cas/login?service=http%3A%2F%2Fwww.service.com

1.2 /serviceValidate

验证接口用于实现票证的校验。客户端向CAS服务器发送票证校验请求,CAS服务器返回票证的状态,包括票证是否有效、票证对应的用户信息等。 参数:

名称必填备注
service客户端尝试访问的应用的标识符。在几乎所有情况下,这将是应用的URL。请注意,作为一个HTTP请求的参数,此URL的值必须是符合RFC 中URL编码的描述。
ticketticket参数表示要进行验证的票证ID,由CAS服务器在用户登录成功后返回。客户端在向CAS服务器发送验证请求时,需要将ticket参数作为请求参数传递给CAS服务器,以便CAS服务器对票证进行验证。

response: / serviceValidate将返回一个格式化的CASserviceResponse XML。 验证成功:

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
<cas:authenticationSuccess>
<cas:user>username</cas:user>
</cas:authenticationSuccess>
</cas:serviceResponse>

验证失败:

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
<cas:authenticationFailure code="INVALID_TICKET">
Ticket ST-1856339-aA5Yuvrxzpv8Tau1cYQ7 not recognized
</cas:authenticationFailure>
</cas:serviceResponse>

1.3 添加应用

进入应用管理-新增应用,选择CAS,如下图所示

1.4 表单参数说明

参数说明

名称必填备注
应用图标应用的图标
应用编码只能输入数字和字母长度不超过64位
应用名称长度不超过64位
应用访问路径系统默认访问路径,
账号映射主体默认手机号码,根据应用自身选择账号体系,例如,选择手机号码,在验证ticket成功后会响应手机号码
ServerNames应用回调地址,认证成功后会往回调地址拼接ticket参数,如配置回调地址为http://domain.test.cn,则回调后http://domain.test.cn?ticket=xxxxxxx
Ticket有效期ticket的有效时长,默认1800,单位秒