使用IAuthenticationSchemeProvider为IdentityServer4动态规划SAML 2.0

问题描述 投票:0回答:1

我正在尝试设置IdentityServer4以处理多个外部IdP,这些IdP是在IAuthenticationSchemeProviderAddScheme方法的帮助下动态添加的。

我已经成功地为OpenIdConnect IdP做了这件事,但在基于Saml2p的IdP上遇到了一些麻烦。在this样本之后,我遵循Saml2p的相同逻辑:

注入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 for SAML 2.0

authentication identityserver4 saml-2.0
1个回答
0
投票

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>();
© www.soinside.com 2019 - 2024. All rights reserved.