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

Windows环境django_saml2_auth调用xmlsec报Signature Error签名错误

Windows环境下djangosaml2对接Azure SSO签名验证失败排查方案

问题表现

  • 基于djangosaml2搭建Django SSO单点登录功能,已完成xmlsec依赖安装,配置校验无误
  • 对接Azure测试端点时触发签名校验失败,核心报错日志:
check_sig: ['C:\Users\user\code\project-backend\env\Scripts\xmlsec.exe', '--verify', '--enabled-reference-uris', 'empty,same-doc', '--enabled-key-data', 'raw-x509-cert', '--pubkey-cert-pem', 'C:\Users\user\AppData\Local\Temp\tmpg9oixidy.pem', '--id-attr:ID', 'urn:oasis:names:tc:SAML:2.0:assertion:Assertion', '--node-id', 'xxxxxxx', '--output', 'C:\Users\user\AppData\Local\Temp\tmp4q_a_mb0.xml', 'C:\Users\user\AppData\Local\Temp\tmpybj2a3vf.xml']
correctly_signed_response: Failed to verify signature
Signature Error: Failed to verify signature
XML parse error: Failed to verify signature
Internal Server Error: /sso/acs/
  • 完全相同配置在Unix类系统下运行正常,仅Windows环境复现该问题

排查解决步骤

按优先级依次验证以下方案:

  • 替换存在兼容问题的旧版xmlsec二进制
    手动下载的老旧编译版xmlsec for Windows存在SHA-256签名算法兼容缺陷、Windows长路径转义bug,无法正确校验Azure返回的SAML断言签名。

    • 执行命令强制重装适配Python环境的xmlsec依赖:pip install --force-reinstall xmlsec djangosaml2
    • 删除Python虚拟环境Scripts目录下之前手动放置的旧版xmlsec.exe,避免程序优先调用旧版本文件。
  • 规避Windows临时目录读写锁问题
    Windows默认Temp目录存在文件读写锁机制,可能出现临时证书、临时SAML断言文件未完全写入磁盘就被xmlsec读取的情况,导致校验读到不完整内容。

    • 在Django配置文件的SAML_CONFIG配置块中,指定项目路径下专属的临时目录:
    SAML_CONFIG = {
        # 保留原有所有SAML配置项
        'tmp_dir': os.path.join(BASE_DIR, 'saml_tmp'),
    }
    
    • 在项目根目录手动创建saml_tmp文件夹,给当前运行Django进程的用户分配该文件夹的完整读写权限。
  • 修复换行符自动篡改问题
    Windows默认文本读写模式会自动将Unix风格换行符\n替换为Windows风格\r\n,导致参与签名校验的SAML内容和Azure返回的原始内容不一致,直接校验失败。

    • 打开虚拟环境路径下的Lib/site-packages/djangosaml2/sigver.py文件
    • 将所有临时文件读写的open()调用,打开模式从文本模式('w'/'r')改为二进制模式('wb'/'rb'),避免系统自动修改文件内容
    • 修改完成后重启Django服务,重新触发SSO登录流程即可正常校验。

内容的提问来源于stack exchange,提问作者Senén P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:06:36