Matrix-Synapse集成CAS SSO时无法获取属性问题求助
Matrix-Synapse CAS单点登录无法获取属性问题排查
问题现象
使用CAS实现Synapse单点登录时,Synapse日志持续报错:
synapse.handlers.sso - 1262 - INFO - GET-50 - SSO attribute missing
但CAS服务器确认已发送属性,且同一服务器上的PHP脚本可正常获取CAS属性。通过修改/opt/venvs/matrix-synapse/lib/python3.9/site-packages/synapse/handlers/cas.py记录CAS响应,返回内容如下:
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'> <cas:authenticationSuccess> <cas:user>MYUSER</cas:user> </cas:authenticationSuccess> </cas:serviceResponse>
环境信息
- 平台:KVM / Debian 11
- Synapse版本:1.85.0
- 安装方式:packages.matrix.org的Debian包
- 数据库:PostgreSQL
- 运行模式:单进程
问题根源分析
从捕获的CAS响应来看,返回内容仅包含<cas:user>节点,没有任何属性节点(如CAS 3.0协议要求的<cas:attributes>包裹的属性字段)。这说明:
- CAS服务器未针对Synapse对应的服务条目配置属性释放;
- Synapse的CAS配置中要求的属性,CAS服务器并未返回。
排查与修复步骤
检查CAS服务器服务配置
- 确认CAS后台中,Synapse对应的服务条目是否开启了属性释放,且配置了Synapse所需的属性(如邮箱、昵称等)。PHP脚本能正常获取属性,说明CAS对PHP服务的属性释放规则是正常的,需单独检查Synapse服务的规则。
核对Synapse的CAS配置
- 打开
homeserver.yaml,找到cas配置段:- 检查
required_attributes是否配置了CAS未返回的属性; - 检查
user_mapping_provider中的配置,确保依赖的属性在CAS响应中存在。
- 检查
- 如果不需要额外属性,可尝试将
required_attributes设为空(需确认Synapse是否允许)。
- 打开
验证CAS协议版本兼容性
- Synapse默认支持CAS 2.0/3.0协议,确认CAS服务器使用的版本:
- CAS 2.0属性通常直接作为
<cas:authenticationSuccess>的子节点; - CAS 3.0属性需包裹在
<cas:attributes>节点下。
- CAS 2.0属性通常直接作为
- 如果CAS服务器使用3.0协议但未正确包裹属性,需调整CAS配置。
- Synapse默认支持CAS 2.0/3.0协议,确认CAS服务器使用的版本:
调整Synapse的CAS解析逻辑(临时方案)
- 若无法快速调整CAS服务器配置,可修改
cas.py中的属性解析代码:- 比如直接使用
<cas:user>作为用户标识,跳过属性检查; - 或自定义解析逻辑,从响应中提取所需字段。
- 比如直接使用
- 若无法快速调整CAS服务器配置,可修改
内容的提问来源于stack exchange,提问作者Aurélien Grimpard
相关产品推荐
相关产品推荐

