Добавление IDP после запуска - PullRequest
1 голос
/ 17 июня 2020

В настоящее время я использую несколько экземпляров IdentityServer4 на dotnetcore 2.1 (скоро переход на 3.0), и у меня есть список IDP SAML, хранящийся в базе данных. Я могу инициализировать их при запуске, используя следующий код в качестве расширения для authenticationBuilder.

        //add IDPs at startup - saml providers comes from DB
        foreach (var samlProvider in samlProviders)
        {               
            authenticationBuilder.AddSaml2(samlProvider.Scheme, samlProvider.Name, options =>
            {                   
                var entityId = new EntityId(my.EntityId);
                options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
                options.SPOptions.EntityId = entityId;
                options.SPOptions.ModulePath = samlProvider.ModulePath;

                if (samlProvider.MinimumSigningAlgorithm != null)
                    options.SPOptions.MinIncomingSigningAlgorithm = samlProvider.MinimumSigningAlgorithm;

                var idp = new IdentityProvider(entityId, options.SPOptions)
                {
                    Binding = Saml2BindingType.HttpRedirect,
                    LoadMetadata = true
                };

                if (samlProvider.MetaDataLocation != null)
                    idp.MetadataLocation = samlProvider.MetaDataLocation;

                options.IdentityProviders.Add(idp);
            });
        }

Я хотел бы иметь возможность добавлять или удалять IDP после запуска на основе содержимого вышеупомянутой таблицы SamlProviders . Я создал службу, которая делает это и вызывается фоновым работником, поскольку мы запускаем несколько серверов и должны гарантировать обновления каждого сервера.

        // get list of new and removed providers
        foreach (var provider in removedProviders)
        {
            _schemeProvider.RemoveScheme(provider.Name);
            // Do I need to remove previous options from the SAML cache?
        }
        foreach (var provider in providerList)
        {

            Saml2Options newOptions = BuildSaml2Options(provider.EntityId, provider.ModulePath, provider.MinimumSigningAlgorithm, provider.MetaDataLocation);

            if (await _schemeProvider.GetSchemeAsync(provider.Scheme) == null)
                _schemeProvider.AddScheme(new AuthenticationScheme(provider.Scheme, provider.Name, typeof(Saml2Handler)));

            //How can I add saml options for the new authentication scheme here?
        }

Можно ли динамически добавлять новых поставщиков удостоверений таким образом? Если да, можно ли вернуться туда, где хранятся настройки, и обновить их для каждого поставщика или добавить / удалить их для изменений поставщика без повторного использования приложений для запуска служб настройки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...