我正在尝试编写一个自定义的 Owin 身份验证中间件。我目前只写一个比这更简单的假人。
根据这个和其他教程,似乎我可以在我的 DummyAuthenticationHandler的AuthenticateCoreAsync中返回 null 以指示身份验证失败。所以我做了
protected override Task<AuthenticationTicket> AuthenticateCoreAsync()
{
return null;
}
如果我返回一个包含一些虚拟 ClaimsIdentity 的新 AuthenticationTicket 是可以的,但是当我返回 null 时,当我调用任何控制器时都会出现此异常。
[NullReferenceException: Object reference not set to an instance of an object.]
Microsoft.Owin.Security.Infrastructure.<BaseInitializeAsync>d__0.MoveNext() +450
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
Microsoft.Owin.Security.Infrastructure.<Invoke>d__0.MoveNext() +264
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.<RunApp>d__5.MoveNext() +191
....
我一直在将 Web Api 2 与 Ninject 一起使用,但似乎即使我尝试在 Startup 中注释掉 Niject 的内容,它仍然无法正常工作。我所有的依赖都是最新的。这是我的启动。
{
HttpConfiguration configuration = new HttpConfiguration();
application.UseDummyAuthentication();
configuration.SuppressDefaultHostAuthentication();
configuration.Filters.Add(new HostAuthenticationFilter("dummy"));
WebApiConfig.Register(configuration);
application.UseNinjectMiddleware(() =>
{
return NinjectWebCommon.CreateKernel(WebApiConfig.CreateConfigurationDelegate());
});
application.UseNinjectWebApi(configuration);
}
我一直在挠头一天,真的很想得到一些帮助。