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

ITFoxTec Saml2对接ADFS报IDX10214 Audience验证失败咨询

问题描述

在ASP.NET Core 3.1 MVC Web应用中使用ITFoxTec Saml2对接ADFS实现身份认证时,登录页可正常加载,但提交AD账号登录信息后,AssertionConsumerService接口抛出如下错误:

IDX10214: Audience validation failed.

对应接口实现代码如下:

[Route("AssertionConsumerService")]
public async Task<IActionResult> AssertionConsumerService()
{
    var binding = new Saml2PostBinding();
    var saml2AuthnResponse = new Saml2AuthnResponse(config);

    binding.ReadSamlResponse(Request.ToGenericHttpRequest(), saml2AuthnResponse);
    if (saml2AuthnResponse.Status != Saml2StatusCodes.Success)
    {
        throw new AuthenticationException($"SAML Response status: {saml2AuthnResponse.Status}");
    }
    binding.Unbind(Request.ToGenericHttpRequest(), saml2AuthnResponse);

    await saml2AuthnResponse.CreateSession(HttpContext, claimsTransform: (claimsPrincipal) => Transform(claimsPrincipal).Result);

    var relayStateQuery = binding.GetRelayStateQuery();
    var returnUrl = relayStateQuery.ContainsKey(relayStateReturnUrl) ? relayStateQuery[relayStateReturnUrl] : Url.Content("~/");
    return Redirect(returnUrl);
}

咨询该错误是否与Identity Provider(身份提供方)配置相关,求对应的排查建议。

排查方案与解决方法

这个错误本质是SAML安全令牌的受众校验不通过,IdP(ADFS侧)和SP(应用侧)配置不匹配都会触发该问题,按以下步骤逐一排查即可:

  • 第一步先拿到ADFS返回的真实SAML令牌内容:打开浏览器F12开发者工具的网络面板,复现登录提交操作,找到发往AssertionConsumerService接口的POST请求,提取请求表单中SAMLResponse字段的值,做Base64解码后找到XML中的<AudienceRestriction>节点,记录<Audience>标签内的实际返回值。
  • 核对应用侧ITFoxTec Saml2配置:代码中传入Saml2AuthnResponse的config配置对象需要满足两个要求:
    • 配置的Issuer(SP实体ID)值,必须和SAML响应中返回的Audience值完全一致,大小写、末尾斜杠、路径后缀任何字符差异都会导致校验失败
    • 若显式配置了AllowedAudienceUris受众白名单,必须将SAML响应返回的Audience值加入该集合
  • 核对ADFS侧信赖方信任配置:
    1. 登录ADFS服务器打开ADFS管理控制台,找到当前应用对应的信赖方信任条目
    2. 打开条目属性页切换到「标识符」标签,确认配置的信赖方标识符值,和应用侧配置的Issuer值完全相同
    3. 若之前修改过应用侧的实体ID,需要同步更新ADFS侧配置,删除残留的旧标识符
  • 本地调试临时方案(生产环境严禁使用):如果需要快速跳过校验调通业务逻辑,可以将Saml2配置中的AudienceRestriction模式设置为AudienceRestrictionMode.Never临时关闭受众校验,正式上线前必须改回默认严格校验模式,避免令牌冒用的安全风险。
  • 额外代码优化提示:当前代码中使用.Result同步阻塞等待Transform方法返回,ASP.NET Core请求上下文下高并发场景存在线程死锁风险,建议改写为await Transform(claimsPrincipal)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:27:22