You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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>包裹的属性字段)。这说明:

  1. CAS服务器未针对Synapse对应的服务条目配置属性释放;
  2. Synapse的CAS配置中要求的属性,CAS服务器并未返回。

排查与修复步骤

  1. 检查CAS服务器服务配置

    • 确认CAS后台中,Synapse对应的服务条目是否开启了属性释放,且配置了Synapse所需的属性(如邮箱、昵称等)。PHP脚本能正常获取属性,说明CAS对PHP服务的属性释放规则是正常的,需单独检查Synapse服务的规则。
  2. 核对Synapse的CAS配置

    • 打开homeserver.yaml,找到cas配置段:
      • 检查required_attributes是否配置了CAS未返回的属性;
      • 检查user_mapping_provider中的配置,确保依赖的属性在CAS响应中存在。
    • 如果不需要额外属性,可尝试将required_attributes设为空(需确认Synapse是否允许)。
  3. 验证CAS协议版本兼容性

    • Synapse默认支持CAS 2.0/3.0协议,确认CAS服务器使用的版本:
      • CAS 2.0属性通常直接作为<cas:authenticationSuccess>的子节点;
      • CAS 3.0属性需包裹在<cas:attributes>节点下。
    • 如果CAS服务器使用3.0协议但未正确包裹属性,需调整CAS配置。
  4. 调整Synapse的CAS解析逻辑(临时方案)

    • 若无法快速调整CAS服务器配置,可修改cas.py中的属性解析代码:
      • 比如直接使用<cas:user>作为用户标识,跳过属性检查;
      • 或自定义解析逻辑,从响应中提取所需字段。

内容的提问来源于stack exchange,提问作者Aurélien Grimpard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:25:09