OWIN Middleware AuthenticationHandler AuthenticateCoreAsync返回null时的异常

时间:2014-11-11 16:20:22

标签: owin owin-middleware

我尝试编写自定义Owin身份验证中间件。我目前只写一个比this更简单的假人。

根据this和其他教程,似乎我可以在我的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
....

我一直在使用Ninject的Web Api 2,但似乎我尝试在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);
}

我一直在摸不着头脑,真的很想得到一些帮助。

3 个答案:

答案 0 :(得分:3)

@Morio:您也可以在不使用异步的情况下返回Task.FromResult<AuthenticationTicket>(null)而不是null

答案 1 :(得分:2)

@badri是对的。

但我想提供更多解释。

原因是,与教程中的那些不同,我的AuthenticateCoreAsync没有async修饰符。使用async返回null将导致某种空任务,当然,这与我最初返回的简单null不同。

答案 2 :(得分:1)

你不能返回null但是做这样的事情。

return new AuthenticationTicket(null, (AuthenticationProperties)null);

看到这一点。

https://github.com/thinktecture/Thinktecture.IdentityModel/blob/master/source/Hawk/Owin/HawkAuthenticationHandler.cs