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侧信赖方信任配置:
- 登录ADFS服务器打开ADFS管理控制台,找到当前应用对应的信赖方信任条目
- 打开条目属性页切换到「标识符」标签,确认配置的信赖方标识符值,和应用侧配置的
Issuer值完全相同 - 若之前修改过应用侧的实体ID,需要同步更新ADFS侧配置,删除残留的旧标识符
- 本地调试临时方案(生产环境严禁使用):如果需要快速跳过校验调通业务逻辑,可以将Saml2配置中的
AudienceRestriction模式设置为AudienceRestrictionMode.Never临时关闭受众校验,正式上线前必须改回默认严格校验模式,避免令牌冒用的安全风险。 - 额外代码优化提示:当前代码中使用
.Result同步阻塞等待Transform方法返回,ASP.NET Core请求上下文下高并发场景存在线程死锁风险,建议改写为await Transform(claimsPrincipal)。
内容的提问来源于stack exchange,提问作者Jane Jian
相关产品推荐
相关产品推荐

