当我通过安全标记激活OWIN logout-everywhere功能并使用OnValidateIdentity
- CookieAuthenticationProvider
与SecurityStampValidator
类的回调时,用户每次登出时都会被注销关闭浏览器。
provider.OnValidateIdentity =
SecurityStampValidator.OnValidateIdentity<MyUserManager, MyUser>(
System.TimeSpan.FromSeconds(10),(manager, user) => {
return user.GenerateUserIdentityAsync(manager);
});
但是,当我在OnValidateIdentity
- 回调中自己进行管道处理(查找和比较安全标记,拒绝或更新标识)时,一切似乎都能正常工作。
这是一个已知的错误,还是我在这里错过了什么?或者是否有关于CookieAuthenticationProvider
和OnValidateIdentity
的使用的良好文档?
用谷歌挖掘只能看到一些简单的样本,但没有进一步的见解。
其他信息
答案 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的实现是错误的。