asp.net-mvc – 什么是Owin rememberBrowser做什么?
|
在标准ASP.Net MVC Identity 2.0 Owin实现的几个地方,您将看到rememberBrowser,如: await signInManager.SignInAsync(user,isPersistent: isPersistent,rememberBrowser: false); 如果你设置rememberBrowser为true,我注意到我可以杀死浏览器,杀死IIS Express,删除浏览器登录的用户,甚至重新启动我的机器,浏览器仍然被视为登录.考虑到已被授权/登录的被删除的用户将会导致希望有效用户使用的[Authorize]属性的代码中的各种问题. 那么RememberBrowser正在做的是什么呢,有没有人有可能假装记住他们的Cookie中的浏览器绕过OWIN登录?似乎[授权]的要点是保证没有人登录的用户访问给定的控制器操作,并记住浏览器似乎是一个洞中的保证. 奖金问题:有没有办法禁用rememberBrowser,以便即使伪造的cookie进来,它会被拒绝? 解决方法@Hezye的答案是正确的,但我会详细说明一下.以下是为“rememberBrowser”创建身份的代码CreateTwoFactorRememberBrowserIdentity(https://aspnetidentity.codeplex.com/SourceControl/latest#src/Microsoft.AspNet.Identity.Owin/Extensions/AuthenticationManagerExtensions.cs行215): public static ClaimsIdentity CreateTwoFactorRememberBrowserIdentity(this IAuthenticationManager manager,string userId)
{
if (manager == null)
{
throw new ArgumentNullException("manager");
}
var rememberBrowserIdentity = new ClaimsIdentity(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);
rememberBrowserIdentity.AddClaim(new Claim(ClaimTypes.NameIdentifier,userId));
return rememberBrowserIdentity;
}
所以这个身份的类型是“TwoFactorRememberBrowserCookie”,只有用户ID的声明. 查看使用此代码的SignInManager的源代码:(https://aspnetidentity.codeplex.com/SourceControl/latest#src/Microsoft.AspNet.Identity.Owin/SignInManager.cs第106行): if (rememberBrowser)
{
var rememberBrowserIdentity = AuthenticationManager.CreateTwoFactorRememberBrowserIdentity(ConvertIdToString(user.Id));
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent },userIdentity,rememberBrowserIdentity);
}
这里IAuthenticationManager用于登录2个身份:一个用于实际用户,另一个用于“rememberBrowser”.我相信这会产生2个cookie – 一个用户验证cookie,另一个记住浏览器. 在SignInManager中使用SignInOrTwoFactor时,代码(第218行)检查Cookie中是否已经设置了“RememberBrowser”标识. OWIN Cookie受加密保护,加密来自DpapiDataProtector(documentation).我不是加密技术的专家,所以不能评论加密的实力.我只是说“rememberBrowser”cookie的加密方式与主认证cookie相同. 关于您重新启动IIS,机器等的练习.您是否从浏览器中删除了Cookie?因为如果没有,Identity(或者说OWIN)会将浏览器视为已登录,即使原始用户记录从数据库中删除.虽然用户不会登录,只要默认模板MVC中有代码检查用户记录的数据库,并注销用户记录已更改. 至于禁用“rememberBrowser” – 总是把错误传给该参数.而第二个cookie不会被设置. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何比较vbscript / ASP中的两个日期?
- asp.net – 将JSON数据解析为.NET对象的最佳方式
- asp.net-mvc – 使用ASP.NET身份重置密码时的令牌无效
- ASP.net MVC4:在局部视图中使用不同的模型?
- asp.net-mvc – 保存后显示相同的页面
- ASP.NET会员盐?
- asp.net-mvc – Web API错误:’ObjectContent`1’类型无法
- asp.net-mvc – 如何在asp.net mvc中检查模型验证错误?
- asp.net-mvc-2 – ASP MVC2中部分缓存的当前做法是什么?
- asp.net-mvc – 最初在使用AuthorizeAttribute时设置Return
- .net – %中的含义是什么:和%=有什么区别?
- 为什么我的asp.net应用程序抛出ThreadAbortExcep
- asp.net-mvc – 更改ASP.NET MVC 3中的默认Model
- asp.net – 如何在回发上保持变量
- asp.net-mvc – MVC 5中的Web API属性路由异常:
- asp.net-mvc – ASP.NET MVC – Elmah不工作,返回
- 当使用SignalR和传输模式长轮询时,Asp.net会话永
- asp.net-mvc – 使用ViewModel模式与MVC 2强类型
- asp.net-mvc-3 – EF 4.1 – 模型关系
- asp.net-mvc – 缓存直到ASP.NET MVC和Entity Fr
