通过CAS REST协议认证时是否可以生成TGT cookie(SSO会话)?
结论
可以实现,CAS 6.0+版本原生支持该能力,只需调整服务端配置和调用逻辑即可。
核心背景说明
CAS默认的REST接口设计面向无状态服务端调用场景,因此默认关闭了SSO会话生成能力:你调用接口拿到的是服务端TGT标识,并非用户浏览器端需要的TGC(Ticket Granting Cookie)(也就是你提到的加密TGT cookie),所以用户无法实现跨应用免登。
具体实现步骤
第一步:修改CAS服务端配置
找到你CAS部署目录下的cas.properties配置文件,新增如下配置项:# 开启REST认证后生成SSO会话的能力 cas.rest.authentication.sso-enabled=true # 配置TGC cookie的安全规则,适配你的业务场景 cas.rest.cookie.secure=true # HTTPS环境设为true,HTTP测试环境设为false cas.rest.cookie.same-site-policy=lax该配置为CAS 6.0+原生支持,不需要引入额外插件或修改核心代码
第二步:调整REST接口调用逻辑
调用POST /cas/v1/tickets接口提交用户名密码认证时,请求参数中的service字段填CAS服务端的根访问地址,不要填单个业务应用的地址。如果是前端直接调用接口,需要开启fetch/axios的withCredentials配置,允许传递Cookie。第三步:把返回的TGC写入用户浏览器
认证成功后,CAS会在响应头的Set-Cookie字段中返回加密后的TGC,你只需要将该Cookie原封不动写入用户浏览器的CAS所属域名下即可。后续用户访问所有接入CAS的业务应用,都会自动携带该Cookie实现免登。
常见注意事项
- 不要把REST接口返回的TGT字符串(即响应体里的
/v1/tickets/XXXX路径中的XXXX部分)和TGC混淆:前者是服务端会话的唯一标识,只能用于后续申请Service Ticket,后者才是实现SSO的浏览器端凭证。 - 如果你的REST接口调用方和CAS服务端属于跨域场景,需要额外配置CAS的CORS规则,允许请求携带凭证,否则浏览器会拦截
Set-Cookie响应导致TGC无法写入。
内容的提问来源于stack exchange,提问作者Jamie B
相关产品推荐
相关产品推荐

