Skip to content

CAS

协议简介

CAS 协议是一种简单而强大的基于票据的协议。完整的协议规范详见这里.

它涉及到一个或多个客户端和一个服务器。客户端嵌入在 CAS 化的应用程序中(称为“CAS 服务”),而 CAS 服务器是一个独立的组件:

  • CAS server 负责用户的身份验证和对应用程序的访问授权。
  • CAS clients 保护 CAS 应用程序,并从 CAS 服务器检索已授权用户的身份。

关键概念

  • TGT (Ticket Granting Ticket,票据授予票据),存储在 TGC cookie 中,代表用户的单点登录会话。
  • ST (Service Ticket,服务票据),作为 URL 中的 GET 参数传输,代表由 CAS 服务器为特定用户授予 CAS 应用的访问权限。

版本

以下是由 Apereo CAS 认可并实现的规范版本。

3.0.3

当前的 CAS 协议规范是 3.0.3 版本。实际的协议规范详见这里, 这是由 Apereo CAS 服务器作为官方参考实现的。它主要是对 CAS 协议修订版 2.0 上最常见增强功能的捕捉。与其他功能相比,2.03.0 版本之间最显著的更新是在新的 /p3/serviceValidate 端点上返回认证/用户属性的能力。

2.0

2.0 版本的协议规范可在 这里找到.

认证流程图

对接示例

端点

对于华东师范大学,CAS 服务当前的前缀是 https://sso.ecnu.edu.cn/ ,或者 https://portal1.ecnu.edu.cn/cas/(兼容端点),目前两者都可以使用,并保持相同的协议。对于新接入的应用而言,我们建议您使用 https://sso.ecnu.edu.cn/ 作为 CAS 的接入端点。

以下讲以 https://sso.ecnu.edu.cn/ 作为示例,如果您使用的是 https://portal1.ecnu.edu.cn/cas/ ,只需要将 sso.ecnu.edu.cn 替换为 portal1.ecnu.edu.cn/cas 即可。

白名单

在对接 CAS 服务之前,您需要将您的应用程序添加到 CAS 服务的白名单中。请将您的应用程序的 应用中文名称应用英文简称URL 发送给我们,以便我们将其添加到白名单中。

发起认证

要发起认证,您需要将用户重定向到 CAS 服务器的 /login 端点。假定您的应用的地址是 https://apphost/callback

那么可以构造一个这样的地址给用户访问,以发起认证:

https://sso.ecnu.edu.cn/login?service=https://apphost/xxxx

获取票据

如果用户完成了身份认证,则会重定向到发起认证时指定的 service 地址,并且会在 URL 中包含一个 ticket 参数。您可以使用这个 ticket 参数来获取用户的身份信息。

例如这样子

https://apphost/xxxx?ticket=ST-21623-vAOCDsdOZ5TSN89y-s9kCTZfGkorg-sso-59c5d5fccc-fsvpx

验证票据

要验证票据,您需要将获取到的 ticektservice 发送到 CAS 服务器的 /serviceValidate 端点,或者 p3/serviceValidate。端点会返回一个 XML 文档,其中包含用户的身份信息。注意您发送的 service 必须和发起认证时提供的 service 严格一致。

请求示例

3.0 版本

对于 /p3/serviceValidate 端点,您可以发送这样的请求。

http
GET /p3/serviceValidate?service=https://apphost/xxxx&ticket=ST-21623-vAOCDsdOZ5TSN89y-s9kCTZfGkorg-sso-59c5d5fccc-fsvpx

您将得到类似这样的响应

xml
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
    <cas:authenticationSuccess>
        <cas:user>20xxxx73</cas:user>
        <cas:attributes>
            <cas:isFromNewLogin>true</cas:isFromNewLogin>
            <cas:authenticationDate>2025-08-04T12:52:17.529</cas:authenticationDate>
            <cas:authnContextClass>mfa-sms</cas:authnContextClass>
            <cas:successfulAuthenticationHandlers>SmsTokenAuthenticationHandler</cas:successfulAuthenticationHandlers>
            <cas:ip>172.20.x.x</cas:ip>
            <cas:BMBM>0445</cas:BMBM>
            <cas:serviceName>xxx系统</cas:serviceName>
            <cas:deviceId>d2ad6785xxxxxxxxdc61aa61</cas:deviceId>
            <cas:samlAuthenticationStatementAuthMethod>urn:oasis:names:tc:SAML:1.0:am:unspecified</cas:samlAuthenticationStatementAuthMethod>
            <cas:credentialType>SmsTokenCredential</cas:credentialType>
            <cas:completedLoginMethod>smsLogin</cas:completedLoginMethod>
            <cas:completedLoginMethod>UsernamePassword</cas:completedLoginMethod>
            <cas:XM>冯*</cas:XM>
            <cas:authenticationMethod>SmsTokenAuthenticationHandler</cas:authenticationMethod>
            <cas:XGH>20xxxxx73</cas:XGH>
            <cas:longTermAuthenticationRequestTokenUsed>false</cas:longTermAuthenticationRequestTokenUsed>
            <cas:serviceId>https://xxxxxxxx*</cas:serviceId>
            <cas:BMMC>信息化治理办公室</cas:BMMC>
            <cas:user-agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0</cas:user-agent>
            </cas:attributes>
    </cas:authenticationSuccess>
</cas:serviceResponse>

响应中包含用户的身份信息,例如用户名、学号、姓名、部门等信息。

属性名称描述
cas:user用户名
cas:attributes用户属性,包含用户的详细信息
cas:XM姓名
cas:XGH学号
cas:BMMC部门名称
cas:BMBM部门代码
2.0 版本

对于 /serviceValidate 端点,您可以发送这样的请求

http
GET /serviceValidate?service=https://apphost/xxxx&ticket=ST-21623-vAOCDsdOZ5TSN89y-s9kCTZfGkorg-sso-59c5d5fccc-fsvpx

使用 sso.ecnu.edu.cn 方式将得到类似这样的响应

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

注销

应用注销时,可以通过访问 https://sso.ecnu.edu.cn/logout?service=https://apphost/xxxx 实现单点登录的注销。接口将自动注销 CAS 服务的会话,并重定向到期望的回调地址 service 上。