Cookies owin cokies ASP.NET MVC 5的Nullreference异常

Cookies owin cokies ASP.NET MVC 5的Nullreference异常,cookies,oauth,asp.net-mvc-5,authorization,owin-middleware,Cookies,Oauth,Asp.net Mvc 5,Authorization,Owin Middleware,我对owin cokies有意见。我们有一个由ASP.NETMVC5支持的站点。通过owin中间件进行授权。有时用户会得到一个白色屏幕,错误为500。我不能在本地复制它,但有几次我可以在生产中复制这个案例。在浏览日志时,我发现错误“System.NullReferenceException:对象引用未设置为对象的实例。” 堆栈: System.NullReferenceException:对象引用未设置为对象的实例。 位于Microsoft.Owin.Security.DataHandler.S

我对owin cokies有意见。我们有一个由ASP.NETMVC5支持的站点。通过owin中间件进行授权。有时用户会得到一个白色屏幕,错误为500。我不能在本地复制它,但有几次我可以在生产中复制这个案例。在浏览日志时,我发现错误“System.NullReferenceException:对象引用未设置为对象的实例。” 堆栈:

System.NullReferenceException:对象引用未设置为对象的实例。 位于Microsoft.Owin.Security.DataHandler.Serializer.TicketSerializer.Write(BinaryWriter-writer,AuthenticationTicket模型) 位于Microsoft.Owin.Security.DataHandler.Serializer.TicketSerializer.Serialize(AuthenticationTicket模型) 在Microsoft.Owin.Security.DataHandler.SecureDataFormat
1.Protect(TData数据)中
在Microsoft.Owin.Security.Cookies.CookieAuthenticationHandler。。但我认为这是徒劳的,因为我有OWIN的最新版本:

Microsoft.AspNet.Identity.Owin:2.2.1
Microsoft.Owin:3.1.0
Microsoft.Owin.Security.OAuth:3.1.0
Microsoft.Owin.Security.Cookies:3.1.0

然而,Owin.Security.Providers是1.27.0版本,因为我们不需要很多提供商(只有facebook和linkedin)

这是一个遗留项目,所以我没有深入研究

我需要一些帮助。
谢谢。

看起来这是AspNetKatana问题,有关更多详细信息,请参阅

被拒绝的身份仍然会创建一个AuthTicket而没有 校长。如果在同一请求上尝试滑动刷新 然后,它将重新考虑失踪的校长


你提到你有时可以在制作中复制这个。如果你能告诉我你做了什么来繁殖的话,这可能会有所帮助。就像你删除Cookie一样?我打开了两个不同的浏览器(或者在Chrome中打开了Incognito)并通过第一个浏览器登录,然后在几分钟后通过第二个浏览器登录,在第二个浏览器上我登录了,然后重复了七次。有时我会重复很长时间,很难重现这个错误@鲁阿尔德瓦内堡
app.CreatePerOwinContext(Entities.Create);
        app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
        app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
        app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);

        //owin иногда теряет куки авторизации в response, поэтому потом возникается nullreference error
        //здесь вызывается специальная библиотека, которая сохраняет куки авторизации (создана для фикса бага овина)
        app.UseKentorOwinCookieSaver();

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/newLogin"),
            LogoutPath = new PathString("/logout"),
            Provider = new CookieAuthenticationProvider
            {
                OnValidateIdentity = ctx =>
                {
                    var ret = Task.Run(async () =>
                    {
                        Claim claim = null;
                        int userId = default(int);
                        User user = null;
                        try
                        {
                            claim = ctx.Identity.FindFirst("SecurityStamp");
                            if (claim == null) return;
                            var userManager = new ApplicationUserManager(DependencyResolver.Current.GetService<IUserStore<User, int>>());
                            userId = ctx.Identity.GetUserId<int>();
                            user = await userManager.FindByIdAsync(userId);

                            if (user != null && user.SecurityStamp != null && user.SecurityStamp != claim.Value)
                            {
                                var exc = new Exception("ConfigureAuth->OnValidateIdentity->Reject");
                                exc.Data.Add("claim", claim.Value);
                                exc.Data.Add("userId", userId);
                                exc.Data.Add("userStamp", user.SecurityStamp);
                                ErrorStore.LogException(exc, HttpContext.Current);
                                ctx.RejectIdentity();
                            }
                        }
                        catch (Exception ex)
                        {
                            var exc = new Exception("ConfigureAuth->OnValidateIdentity->catch", ex);
                            if (claim != null)
                            {
                                exc.Data.Add("claim", claim.Value);
                            }
                            exc.Data.Add("userId", userId);
                            if (user!=null)
                            {
                                exc.Data.Add("userStamp", user.SecurityStamp);
                            }
                            ErrorStore.LogException(exc, HttpContext.Current);
                            ctx.RejectIdentity();
                            return;
                        }
                    });
                    return ret;
                },
                OnApplyRedirect = ctx =>
                {
                    if (!IsApiRequest(ctx.Request))
                    {
                        ctx.Response.Redirect(ctx.RedirectUri);
                    }
                },
                OnException = (context =>
                {
                    ErrorStore.LogException(context.Exception, HttpContext.Current);
                    return;
                })
            }
        });