在运行时加载 SAML2 配置,而不是在启动时加载它

Load SAML2 configuration on the runtime instead of loading it on the Startup

ITfoxtec.Identity.Github 上的所有 ITfoxtec.Identity.Saml2 示例项目在 Startup class 的 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();
    }

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

中使用 Saml2Configuration 之前