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

使用Passport-SAML对接ADFS实现SSO时遇MSIS0038签名错误求助

解决ADFS + Passport-SAML的MSIS0038签名错误

这个MSIS0038错误我之前帮不少开发者排查过,核心就是ADFS接收到的SAML请求要么签名验证通不过,要么Issuer(发行方)配置不匹配,咱们一步步来拆解问题:

1. 先确认Issuer的完全匹配性

错误日志里明确标了issuer:'myCompany_com',这是第一个要盯死的点:

  • 打开你的Passport-SAML配置,找到issuer字段,确保它的值就是完全一致的myCompany_com——包括大小写、下划线/点的区别,甚至不能多一个空格。
  • 登录客户端的ADFS管理控制台,找到对应的信赖方信任,查看“标识符”列表,必须有一个和上面的Issuer值精确匹配的条目。别小看大小写这点,ADFS对标识符是严格区分的,哪怕是MyCompany_Com都会不匹配。

2. 排查SAML请求的签名验证问题

ADFS默认会强制验证SAML请求的签名,这里容易踩几个坑:

  • 证书不匹配:确保你Passport-SAML配置里用的私钥,对应的公钥已经导入到ADFS的信赖方信任中(在“签名”标签下添加证书)。如果元数据是你提供的,要检查元数据里<md:KeyDescriptor use="signing">节点的公钥是不是和你的SP公钥一致——ADFS导入元数据时会自动提取这个公钥,要是元数据里的公钥错了,签名肯定验证失败。
  • 签名算法不兼容:ADFS默认使用SHA-256作为签名算法,如果你Passport-SAML里配置的signatureAlgorithm是sha1或者其他值,就会触发错误。把配置改成signatureAlgorithm: 'sha256'再试试。
  • 请求未签名但ADFS要求签名:检查Passport-SAML的authnRequestSigned配置,如果设为false,但ADFS信赖方信任的“高级”标签里勾选了“要求所有传入的SAML请求必须签名”,这就直接冲突了。生产环境建议开启SP的请求签名(authnRequestSigned: true),测试环境可以临时关闭ADFS的签名要求来验证。

3. 核对元数据文件的正确性

你提供给客户端的myCompany.xml元数据是ADFS配置的核心依据,要重点检查:

  • <md:EntityDescriptor>标签的entityID属性必须和Issuer值完全一致;
  • <md:AssertionConsumerService>的Location属性必须和你Passport-SAML里的callbackUrl完全匹配,包括http/https、域名、路径;
  • 签名用的公钥节点没有格式错误,比如有没有多余的换行或者缺失的-----BEGIN PUBLIC KEY-----/-----END PUBLIC KEY-----标记。

4. 辅助测试建议

可以用浏览器的SAML Tracer插件抓包,查看发送给ADFS的SAML请求内容:

  • 确认<saml:Issuer>节点的值确实是myCompany_com;
  • 检查请求里是否包含<ds:Signature>节点,确认签名已正确生成。

内容的提问来源于stack exchange,提问作者jerem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:12:26