Динамические схемы SAML 2.0 для IdentityServer4 с IAuthenticationSchemeProvider - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь настроить IdentityServer4 для работы с несколькими внешними IdP, которые добавляются динамически с помощью метода IAuthenticationSchemeProvider AddScheme.

Я успешно сделал это для OpenIdConnect IdP, но у меня возникли проблемы с IdP на основе Saml2p.После этого образца я следовал той же логике для Saml2p:

Injected IOptionsMonitorCache<Saml2pAuthenticationOptions> и:

if (await _schemeProvider.GetSchemeAsync(scheme) == null)
            {
                _schemeProvider.AddScheme(new AuthenticationScheme(scheme, scheme, typeof(Saml2pAuthenticationHandler)));
            }
            else
            {
                 _saml2pOptionsCache.TryRemove(scheme);
            }
            _saml2pOptionsCache.TryAdd(scheme, samlOptions);

И я получаю исключение:

Unable to resolve service for type 'Rsk.AspNetCore.Authentication.Saml2p.Factories.ISamlFactory``1[IdentityServer4.Saml.Generators.Interfaces.IServiceProviderMetadataGenerator]' while attempting to activate 'Rsk.AspNetCore.Authentication.Saml2p.Saml2pAuthenticationHandler'.

Я не уверен, стоит ли мне устанавливать дополнительные конфигурации, касающиеся Saml, при добавлении схемы, любая помощь приветствуется.

Редактировать: я использую Rsk NuGet для SAML 2.0

1 Ответ

0 голосов
/ 12 апреля 2019

Вызов AddSaml2p регистрирует загрузку зависимостей, а также обработчик аутентификации.

Я бы либо назвал AddSaml2p где-нибудь в вашем коде, либо зарегистрировал бы необходимые зависимости самостоятельно так:

builder.Services.AddMemoryCache();
builder.Services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

builder.Services.TryAddScoped<ISamlFactory<IServiceProviderMetadataGenerator>, 
builder.Services.TryAddScoped<ISamlFactory<ISaml2SingleSignOnRequestGenerator>, Saml2SingleSignOnRequestGeneratorFactory>();
builder.Services.TryAddScoped<ISamlFactory<ISaml2SingleLogoutRequestGenerator>, Saml2SingleLogoutRequestGeneratorFactory>();
builder.Services.TryAddScoped<ISamlFactory<ISaml2SingleSignOnResponseValidator>, Saml2SingleSignOnResponseValidatorFactory>();

builder.Services.TryAddScoped<ISamlBindingService, SamlBindingService>();
builder.Services.TryAddScoped<ISamlSigningService, SamlSigningService>();
builder.Services.TryAddScoped<IDateTimeService, SystemClockDateTimeService>();
builder.Services.TryAddScoped<ISamlTimeComparer, SamlTimeComparer>();
builder.Services.TryAddScoped<ISamlCorrelationStore, CookieCorrelationStore>();
...