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

.NET 4.8多租户Sustainsys.Saml2高负载下IDX10214受众验证失败问题

问题根因与解决方案

核心问题:静态共享的IOptions实例导致并发配置冲突

这不是Keycloak的问题,完全是代码里的全局静态Options被多请求并发修改导致的:

  • 你的Saml2Controller使用了静态的IOptions属性,这个变量是应用级全局共享的
  • 高并发下,租户A的请求刚把Options.SPOptions.EntityId设为tenant_a,租户B的请求就会把它改成tenant_b,导致两个请求的配置互相覆盖
  • 当Acs命令执行时,用了错误的租户配置去验证Audience,自然抛出IDX10214错误,同时出现会话信息混乱的情况

解决方案:隔离每个请求的SAML配置实例

1. 停止修改全局静态Options,为每个请求创建独立配置实例

不要直接修改全局的Options.SPOptions,而是基于基础配置克隆新的Saml2Options实例,每个请求用自己的专属配置:

public ActionResult SignIn()
{
    // 从基础配置克隆新的实例,避免修改全局对象
    var tenantOptions = new Saml2Options(Options.Value);
    tenantOptions.SPOptions.ReturnUrl = this.GetReturnUrl();
    tenantOptions.SPOptions.Saml2PSecurityTokenHandler = null;
    tenantOptions.SPOptions.EntityId = new EntityId(GetClientId());

    // 用独立的Options实例执行命令
    var result = CommandFactory.GetCommand(CommandFactory.SignInCommandName).Run(
        Request.ToHttpRequestData(),
        Microsoft.Extensions.Options.Options.Create(tenantOptions));

    result.ApplyCookies(Response, true);
    return result.ToActionResult();
}

2. 在Acs方法中关联对应租户的配置

Acs请求需要先识别当前请求所属的租户(比如从RelayState、请求域名、或提前存入Cookie的租户标识中获取),再加载对应租户的配置去执行验证:

public ActionResult Acs()
{
    // 从请求中获取租户ID(根据你的业务逻辑实现,比如解析RelayState)
    var tenantId = GetTenantIdFromRequest();
    // 创建该租户的专属配置实例
    var tenantOptions = new Saml2Options(Options.Value);
    tenantOptions.SPOptions.EntityId = new EntityId(GetClientIdByTenant(tenantId));
    
    // 用租户专属配置执行ACS命令
    var result = CommandFactory.GetCommand(CommandFactory.AcsCommandName).Run(
        Request.ToHttpRequestData(),
        Microsoft.Extensions.Options.Options.Create(tenantOptions));

    // 自定义逻辑...

    result.SignInOrOutSessionAuthenticationModule();
    result.ApplyCookies(Response, true);
    return result.ToActionResult();
}

3. 关键注意事项

  • ASP.NET 4.8中的静态变量属于应用域全局共享,绝对不能在多租户/高并发场景下用来存储请求级的配置
  • 确保租户标识的传递可靠:可以在SignIn时把租户ID存入RelayState,或者通过请求域名、子路径等方式识别租户,保证Acs时能准确匹配到对应配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 08:42:15