OnValidateIdentity禁用MVC OWIN记住我的选项

时间:2014-06-22 15:07:45

标签: asp.net-mvc-5 asp.net-identity owin

当我通过安全标记激活OWIN logout-everywhere功能并使用OnValidateIdentity - CookieAuthenticationProviderSecurityStampValidator类的回调时,用户每次登出时都会被注销关闭浏览器。

provider.OnValidateIdentity =
    SecurityStampValidator.OnValidateIdentity<MyUserManager, MyUser>(
        System.TimeSpan.FromSeconds(10),(manager, user) => {
            return user.GenerateUserIdentityAsync(manager);                                                       
        });

但是,当我在OnValidateIdentity - 回调中自己进行管道处理(查找和比较安全标记,拒绝或更新标识)时,一切似乎都能正常工作。

这是一个已知的错误,还是我在这里错过了什么?或者是否有关于CookieAuthenticationProviderOnValidateIdentity的使用的良好文档? 用谷歌挖掘只能看到一些简单的样本,但没有进一步的见解。

其他信息

  • 我使用自己的UserStorage实现来保存所有 数据库中的数据
  • 我注意到每个页面请求都会调用两次 当我使用myStorage时,GetSecurityStampAsync的UserStorage 实施时,只完成一次通话。
  • 已安装的身份版本为2.0.1

3 个答案:

答案 0 :(得分:4)

这基本上是一个错误,cookie的重新生成应该尊重cookie上当前的Remember Me选项。作为一种变通方法,您可以复制OnValidateIdentity代码并输入当前上下文属性以使持久模式流过:

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

答案 1 :(得分:3)

这在ASP.NET Identity 2.2中得到了解决。见https://aspnetidentity.codeplex.com/workitem/2319

答案 2 :(得分:0)

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

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

在我看来,SignIn - 操作是不完整的,应该设置remember-me选项吗?因此,我假设SecurityStampValidator的实现是错误的。