我正在构建一个.Net Core Web App,它将成为一个服务Provider ,并使用SSO通过身份Provider 登录用户.

当我加载Web应用程序并单击Login时...我收到错误...

我的appsettings.json档案中有以下内容:

  "Saml2": {
    "zau_idpMetadata": "https://saml.zau.edu/zau_idp/shibboleth ",
    "Issuer": "UniversityComms",
    "SingleSignOnDestination": "https://saml.zau.edu/zau_idp/profile/SSO",
    "SingleLogoutDestination": "https://saml.zau.edu/zau_idp/profile/Logout",
    "CertificateValidationMode": "None",
    //"CertificateValidationMode": "ChainTrust",
    "RevocationMode": "NoCheck"
  }

你可以看到我定义了SingleLogoutDestination个.

这是在我的program.cs文件中:

builder.Services.Configure<Saml2Configuration>(saml2Configuration =>
{
    saml2Configuration.AllowedAudienceUris.Add(saml2Configuration.Issuer);

    var entityDescriptor = new EntityDescriptor();
    //entityDescriptor.ReadIdPSsoDescriptorFromUrlAsync(httpClientFactory, new Uri(Configuration["Saml2:IdPMetadata"])).GetAwaiter().GetResult();
    entityDescriptor.ReadIdPSsoDescriptorFromUrl(new Uri(configuration["Saml2:IdPMetadata"]));
    if (entityDescriptor.IdPSsoDescriptor != null)
    {
        saml2Configuration.SingleSignOnDestination = entityDescriptor.IdPSsoDescriptor.SingleSignOnServices.First().Location;
        saml2Configuration.SingleLogoutDestination = entityDescriptor.IdPSsoDescriptor.SingleLogoutServices.First().Location;
        saml2Configuration.SignatureValidationCertificates.AddRange(entityDescriptor.IdPSsoDescriptor.SigningCertificates);
    }
    else
    {
        throw new Exception("IdPSsoDescriptor not loaded from metadata.");
    }
});

builder.Services.AddSaml2();

var app = builder.Build();

然而,当我启动应用程序,并try 通过SSO登录时,我收到以下错误:

System.InvalidOperationException:‘Sequence Not Elements’

以下是完整的错误:

  InvalidOperationException: Sequence contains no elements

    System.Linq.ThrowHelper.ThrowNoElementsException()
    System.Linq.Enumerable.First<TSource>(IEnumerable<TSource> source)
    Program+<>c__DisplayClass0_0.<<Main>$>b__0(Saml2Configuration saml2Configuration) in Program.cs

        var entityDescriptor = new EntityDescriptor();
        //entityDescriptor.ReadIdPSsoDescriptorFromUrlAsync(httpClientFactory, new Uri(Configuration["Saml2:IdPMetadata"])).GetAwaiter().GetResult();
        entityDescriptor.ReadIdPSsoDescriptorFromUrl(new Uri(configuration["Saml2:IdPMetadata"]));
        if (entityDescriptor.IdPSsoDescriptor != null)
        {
            saml2Configuration.SingleSignOnDestination = entityDescriptor.IdPSsoDescriptor.SingleSignOnServices.First().Location;

            saml2Configuration.SingleLogoutDestination = entityDescriptor.IdPSsoDescriptor.SingleLogoutServices.First().Location;

            saml2Configuration.SignatureValidationCertificates.AddRange(entityDescriptor.IdPSsoDescriptor.SigningCertificates);
        }
        else
        {
            throw new Exception("IdPSsoDescriptor not loaded from metadata.");
        }

Microsoft.Extensions.Options.OptionsFactory<TOptions>.Create(string name)
Microsoft.Extensions.Options.UnnamedOptionsManager<TOptions>.get_Value()
UniversityComms.Controllers.AuthController..ctor(IOptions<Saml2Configuration> configAccessor) in AuthController.cs

        {
            const string relayStateReturnUrl = "ReturnUrl";
            private readonly Saml2Configuration config;
            public AuthController(IOptions<Saml2Configuration> configAccessor)
            {

                config = configAccessor.Value;

            }
            [Route("Login")]
            public IActionResult Login(string? returnUrl = null)
            {
                var binding = new Saml2RedirectBinding();

lambda_method22(Closure , IServiceProvider , object[] )

推荐答案

该代码从IDP元数据端点zau_idpMetadata加载SingleSignOnDestinationSingleLogoutDestination.IDP元数据可能不包含至少一个SingleLogoutServices,因此它在.First()失败.

您可以注释掉单个注销行并从配置中加载它.

Csharp相关问答推荐

从WinUI 3中的网络摄像头捕获的旋转图像

System.Text.Json Utf8JsonReader正在读取数组值两次

System.Data.SQLite:判断SQLite数据库是否为空(任何表中至少有一行)

AutoMapper -如何为两个不同的用例设置单个映射?

错误401未授权ASP.NET Core.使用JWT创建身份验证/授权

Monty Hall游戏节目模拟给我50/50的结果

HttpContext. RequestAborted当Android APP失go 连接时未取消

如何在Reflection. Emit中使用具有运行时定义的类型参数的泛型类型

处理. netstandard2.0项目中HttpClient.SslProtocol的PlatformNotSupportedException问题""

将列表字符串映射为逗号分隔字符串<>

找不到网址:https://localhost:7002/Category/Add?区域= Admin.为什么我的URL是这样生成的?area = Admin而不是/Admin/

Select Many和默认IfEmpty内部Select Many错误工作

模型绑定RazorPage表单

方法从数据表中只 Select 一个条件?

异步实体框架核心查询引发InvalidOperation异常

NET8 MAUI并部署到真实设备上进行测试

C#带主体的主构造函数?

确定System.Text.Json序列化中是否无法识别Type

错误:此版本的Visual Studio无法打开以下项目

DropDownListFor未显示选定值