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

Asp.Net Core多Sustainsys Saml2配置第二实例失效问题求助

Asp.Net Core多Sustainsys Saml2实例配置问题排查

问题详情

在Asp.Net Core中配置了多个Sustainsys Saml2实例,第一个实例“SCHM-MI”运行正常,但第二个实例“SCHM-GL”无法正常工作。

配置代码

.AddSaml2("SCHM-MI", options =>
{
    options.SPOptions.EntityId = new EntityId("SCHM-MI");
    options.IdentityProviders.Add(new IdentityProvider(
        new EntityId(".............."), options.SPOptions)
    {
        MetadataLocation = "...................",
        LoadMetadata  = true
    });
})
.AddSaml2("SCHM-GL",options =>
{
    options.SPOptions.EntityId = new EntityId("SCHM-GL");
    options.IdentityProviders.Add(new IdentityProvider(
        new EntityId(".................."), options.SPOptions)
    {
        MetadataLocation = "............",
        LoadMetadata = true
    });
}); 

登录Challenge请求代码

return new ChallengeResult(
                 "SCHM-GL",
                 new AuthenticationProperties
                 {
                     RedirectUri = Url.Action(nameof(LoginCallback), new { returnUrl = "http://localhost:4200/callback" }),
                 });

报错信息

KeyNotFoundException: No Idp with entity id "GL Entity ID" found.
Sustainsys.Saml2.Configuration.IdentityProviderDictionary.get_Item(EntityId entityId)

使用版本:最新版Sustainsys.Saml2.AspNetCore2


解决方案

核心原因

当设置LoadMetadata = true时,Sustainsys会从指定的MetadataLocation拉取元数据,并自动覆盖手动创建IdentityProvider时指定的EntityId,导致后续查找IdP时找不到预期的实体ID。

修复步骤

  1. 确认元数据中的真实实体ID

    • 直接访问第二个实例的MetadataLocation地址,查找<md:EntityDescriptor entityID="xxx">节点,记录其中的真实IdP实体ID。
  2. 修改Saml2实例配置
    更新第二个实例的配置,确保手动指定的EntityId与元数据中的一致,同时禁用元数据对实体ID的覆盖:

    .AddSaml2("SCHM-GL",options =>
    {
        options.SPOptions.EntityId = new EntityId("SCHM-GL");
        var idp = new IdentityProvider(
            // 替换为元数据中获取的真实GL Entity ID
            new EntityId("真实的GL IdP实体ID"), options.SPOptions)
        {
            MetadataLocation = "............",
            LoadMetadata = true,
            // 禁止元数据更新实体ID
            UpdateEntityId = false,
            // 多实例场景建议开启,避免响应匹配问题
            AllowUnsolicitedAuthnResponse = true
        };
        options.IdentityProviders.Add(idp);
    });
    
  3. 明确Challenge时的IdP实体ID
    如果需要确保Challenge请求指向正确的IdP,可以在AuthenticationProperties中显式指定:

    return new ChallengeResult(
        "SCHM-GL",
        new AuthenticationProperties
        {
            RedirectUri = Url.Action(nameof(LoginCallback), new { returnUrl = "http://localhost:4200/callback" }),
            Items = { { "Saml2:Idp", "真实的GL IdP实体ID" } }
        });
    
  4. 排查元数据加载问题

    • 启用Sustainsys的调试日志,查看元数据加载过程:
      在appsettings.json中添加日志配置:
      "Logging": {
        "LogLevel": {
          "Sustainsys": "Debug"
        }
      }
      
      通过日志确认第二个实例的元数据是否成功拉取、解析,是否存在网络或格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:45:34