具有IAuthenticationSchemeProvider

时间:2019-04-11 22:48:18

标签: authentication identityserver4 saml-2.0

我正在尝试将IdentityServer4设置为与多个外部IdP一起使用,这些IdP是在IAuthenticationSchemeProvider的{​​{1}}方法的帮助下动态添加的。

我已经成功完成了AddScheme个IdP的操作,但是对于基于OpenIdConnect的IdP却有些麻烦。 在this示例之后,我对Saml2p遵循相同的逻辑:

注入了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);

我不确定在添加方案时是否应该对Saml进行一些其他配置,任何帮助表示赞赏。

编辑: 我正在将Rsk NuGet用于SAML 2.0

1 个答案:

答案 0 :(得分: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>();