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不会被设置. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 在subversion提交时忽略的文件夹
- asp.net-mvc-3 – 应该使用HTTP引用来验证还是令牌验证来防
- 如何在aspx页面中隐藏ASP.NET自定义控件的属性?
- asp.net-mvc – 暂时在MVC控制器,MVC,MVC控制器临时存储中保
- asp.net – 通过ajax将jquery中的数组传递给c#webmethod
- ASP.NET设计FTP文件上传的解决方案
- asp.net – 我应该使用Orchard或umbraco还是别的什么?
- asp.net – 如何绑定gridview中的下拉列表?
- 在ASP.NET中使用JQuery选择ID属性
- asp.net-mvc – 如何在ASP.NET MVC中测试动作过滤器?
- asp.net – 是否可以在.net中读取.eml文件
- asp.net-mvc-3 – 找不到ASP.NET MVC 3 HttpPost
- asp.net-mvc – Html.Actionlink作为Button效果
- asp.net-mvc-3 – signalR维护用户连接ID
- asp.net – 我可以在DefaultModelBinder上禁用Da
- asp.net-mvc – ASP.NET MVC AjaxForm没有正确更
- ASP.NET会话对象中的实体框架对象上下文?
- asp.net页面SqlCacheDependency缓存实例
- asp.net-mvc – asp.net MVC扩展DataAnnotions
- asp.net-mvc – 如何使用MVC 3将文本数据导出到c