【问题标题】:Load SAML2 configuration on the runtime instead of loading it on the Startup在运行时加载 SAML2 配置,而不是在启动时加载它
【发布时间】:2021-03-16 07:33:06
【问题描述】:

Github 上的所有 ITfoxtec.Identity.Saml2 示例项目在 Startup 类的 ConfigureServices 方法中加载 SAML 配置。我已将所有配置存储在数据库中。有没有办法在运行时(在我的 .Net Core 项目启动后)从代码中加载 SAML 配置?

public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<Saml2Configuration>(Configuration.GetSection("Saml2"));
        services.Configure<Saml2Configuration>(saml2Configuration =>
        {
            //saml2Configuration.SignAuthnRequest = true;
            saml2Configuration.SigningCertificate = CertificateUtil.Load(AppEnvironment.MapToPhysicalFilePath(Configuration["Saml2:SigningCertificateFile"]), Configuration["Saml2:SigningCertificatePassword"]);

            //saml2Configuration.SignatureValidationCertificates.Add(CertificateUtil.Load(AppEnvironment.MapToPhysicalFilePath(Configuration["Saml2:SignatureValidationCertificateFile"])));
            saml2Configuration.AllowedAudienceUris.Add(saml2Configuration.Issuer);

            var entityDescriptor = new EntityDescriptor();
            entityDescriptor.ReadIdPSsoDescriptorFromUrl(new Uri(Configuration["Saml2:IdPMetadata"]));
            if (entityDescriptor.IdPSsoDescriptor != null)
            {
                saml2Configuration.AllowedIssuer = entityDescriptor.EntityId;
                saml2Configuration.SingleSignOnDestination = entityDescriptor.IdPSsoDescriptor.SingleSignOnServices.First().Location;
                saml2Configuration.SingleLogoutDestination = entityDescriptor.IdPSsoDescriptor.SingleLogoutServices.First().Location;
                saml2Configuration.SignatureValidationCertificates.AddRange(entityDescriptor.IdPSsoDescriptor.SigningCertificates);
                if (entityDescriptor.IdPSsoDescriptor.WantAuthnRequestsSigned.HasValue)
                {
                    saml2Configuration.SignAuthnRequest = entityDescriptor.IdPSsoDescriptor.WantAuthnRequestsSigned.Value;
                }
            }
            else
            {
                throw new Exception("IdPSsoDescriptor not loaded from metadata.");
            }
        });

        services.AddSaml2(slidingExpiration: true);

        services.AddControllersWithViews();
    }

【问题讨论】:

    标签: asp.net-core-3.1 itfoxtec-identity-saml2


    【解决方案1】:

    是的,可以将配置负载从启动移到以后。您可以通过调用方法在使用 Saml2Configuration 配置对象之前加载它的内容。例如在示例中,在 Login method 中使用 Saml2Configuration 之前。

    【讨论】:

    • 感谢您的回复。我已成功完成此操作并从数据库加载了配置。现在的问题是,当 Idp 发回 SAML 响应时,我怎么知道这个响应是针对哪个用户的?因为当我知道该响应是针对哪个用户时,我将能够从数据库中检索配置来验证 SAML 响应。我希望你能理解这里的问题。
    • 收到响应后,您可以使用 ReadSamlResponse 读取它而无需进行验证,例如:github.com/ITfoxtec/ITfoxtec.Identity.Saml2/blob/master/test/…。 Therafter,例如,您可以读取 ID 或继电器状态作为参考。
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多