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

使用Sustainsys.Saml2对接ADFS时出现签名验证错误

问题描述

在ASP.NET Core应用中使用Sustainsys.Saml2实现ADFS单点登录时,流程卡在ADFS登录后重定向回应用的环节,应用抛出错误:

"Sustainsys.Saml2.UnsuccessfulSamlOperationException": The Saml2Response must have status success to extract claims.
(Saml2 Status code: responder)

查看ADFS服务器日志,发现根源错误:

Microsoft.IdentityModel.Protocols.XmlSignature.SignatureVerificationFailedException: MSI0037: No signature verification certificate found for issuer "<my-application-url>".

当前Sustainsys配置代码:

options.SPOptions.EntityId = new EntityId("<my-application-url>");
options.SPOptions.PublicOrigin = new Uri("<my-application-url>");
options.AuthenticaionRequestSigningBehavior = SigningBehavior.Always;
options.SPOptions.WantAssertionsSigned = true;
var certificate = new X509Certificate(certificatePath, secret);

IdentityProvider identityProvider = new IdentityProvider(
  new EntityId("http://<adfs-server>/adfs/services/trust"), options.SPOptions)
  {
      MetadataLocation = "<adfs-metadata-url>",
      AllowUnsolicitedAuthnResponse = true,
      Binding = Saml2BindingType.HttpRedirect,
      WantAuthnRequestsSigned = true,
      OutboundSigningAlogorithm = "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
   };

identityProvider.SigningKeys.AddConfiguredKey(certificate);
options.IdentityProviders.Add(identityProvider);

ServicesCertificate serviceCertificate = new ServiceCertificate()
{
  Certificate = certificate,
  Use = CertificateUse.Signing
};

options.SPOptions.ServiceCertificates.Add(serviceCertificate);
解决方案
  • 修正配置拼写错误:

    • AuthenticaionRequestSigningBehavior 改为 AuthenticationRequestSigningBehavior(缺失字母t)
    • OutboundSigningAlogorithm 改为 OutboundSigningAlgorithm(缺失字母r)
      这两处拼写错误会导致签名规则无法正确生效,直接触发ADFS的签名验证失败。
  • 修正IdentityProvider签名密钥配置:
    当前代码错误地将SP自身的证书添加到了IDP的SigningKeys中,IDP的签名密钥应存储ADFS用来签名SamlResponse的公钥:

    1. 若配置了MetadataLocation,Sustainsys会自动从ADFS元数据中提取其签名密钥,无需手动添加
    2. 手动添加时,需导入ADFS的公钥证书,而非SP的证书
  • 同步ADFS信赖方信任配置:

    1. 将SP的公钥证书导入ADFS的「信赖方信任」→「签名证书」列表,ADFS需要此证书验证SP发送的认证请求签名
    2. 确保ADFS中配置的「信赖方标识符」与代码里的SPOptions.EntityId完全一致(包括URL大小写、斜杠等细节)
    3. 检查ADFS中配置的「回复URL」与应用的回调URL(由PublicOrigin生成)完全匹配
  • 验证证书用途:
    确认SP使用的X509证书包含「数字签名」用途,避免因证书权限不足导致签名验证失败


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:50:29