我正在尝试将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
答案 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>();