我正在尝试使用ASP.NET Core和Sustainsys.Saml2库中的IAuthenticationSchemeProvider
动态添加SAML2身份验证方案:
schemeProvider.AddScheme(new AuthenticationScheme("myAuthScheme", "myAuthScheme", typeof(Saml2Handler)));
随着该计划,我需要配置与它一起的Saml2Options
。我试图使用IOptionsMonitorCache<Saml2Options>
这样做:
samlOptionsCache.TryAdd("myAuthScheme", options);
当我尝试使用此方案进行身份验证时,我收到以下错误:
NullReferenceException:未将对象引用设置为对象的实例。 Sustainsys.Saml2.WebSso.Saml2Urls..ctor(HttpRequestData request,IOptions options)Sustainsys.Saml2.WebSso.SignInCommand.Run(EntityId idpEntityId,string returnPath,HttpRequestData request,IOptions options,IDictionary relayData)Sustainsys.Saml2.AspNetCore2.Saml2Handler。 ChallengeAsync(AuthenticationProperties属性)
所以看起来这些属性永远不会与该方案相关联。
我不确定我是否会走这条路。是否可以以这种方式动态注册方案?
事实证明它只是没有实例化的记录器,所有其他选项都很好。我通过添加...解决了这个
options.SPOptions.Logger = new AspNetCoreLoggerAdapter(loggerFactory.CreateLogger<Saml2Handler>());
...当我设置选项时
loggerFactory
指的是Microsoft.Extensions.Logging.ILoggerFactory
的注射实例。