Asp.net mvc 5 OnValidateIdentity禁用MVC OWIN记住我选项

Asp.net mvc 5 OnValidateIdentity禁用MVC OWIN记住我选项,asp.net-mvc-5,asp.net-identity,owin,Asp.net Mvc 5,Asp.net Identity,Owin,当我通过安全戳激活OWIN logout everywhere功能,并使用CookieAuthenticationProvider的OnValidateIdentity回调和SecurityStampValidator-类时,用户每次关闭浏览器时都会注销 provider.OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<MyUserManager, MyUser>( System.T

当我通过安全戳激活OWIN logout everywhere功能,并使用
CookieAuthenticationProvider
OnValidateIdentity
回调和
SecurityStampValidator
-类时,用户每次关闭浏览器时都会注销

provider.OnValidateIdentity =
    SecurityStampValidator.OnValidateIdentity<MyUserManager, MyUser>(
        System.TimeSpan.FromSeconds(10),(manager, user) => {
            return user.GenerateUserIdentityAsync(manager);                                                       
        });
provider.OnValidateIdentity=
SecurityStampValidator.OnValidateIdentity(
System.TimeSpan.FromSeconds(10),(管理员、用户)=>{
返回user.GenerateUserIdentityAsync(manager);
});
但是,当我自己在
OnValidateIdentity
-回调中执行管道操作(查找和比较安全标记,拒绝或更新标识)时,一切似乎都正常

这是一个已知的错误,还是我错过了什么?或者是否有关于
CookieAuthenticationProvider
和使用
OnValidateIdentity
的良好文档?
通过谷歌挖掘,我只看到了一些简单的例子,但没有给出进一步的见解

其他信息

  • 我使用自己的UserStorage实现,它保存了所有 数据库中的数据
  • 我注意到每个页面请求调用两次 当我使用 实现时,只执行一个调用
  • 已安装的标识版本为2.0.1

我在
SecurityStampValidator.OnValidateIdentity的反汇编中发现了以下代码:

// .. some other code
// ...
ClaimsIdentity claimsIdentity = await regenerateIdentityCallback(userManager, tUser);
if (claimsIdentity != null){
context.get_OwinContext().get_Authentication().SignIn(new ClaimsIdentity[]
    {
       claimsIdentity
    });
}

在我看来,
登录
-操作不完整,应该设置“记住我”选项吗?因此,我假设SecurityStampValidator的实现存在缺陷。

这基本上是一个缺陷,cookie的重新生成应该尊重cookie上当前的“记住我”选项。作为一种解决方法,您可以复制
OnValidateIdentity
代码并在当前上下文属性中馈送,以使持久模式通过:

context.OwinContext.Authentication.SignIn(context.Properties, identity);

这在ASP.NET Identity 2.2中得到解决。请参见

我的研究和调试表明,“ispersist”被添加为对用户身份的声明。