asp.net-mvc – 什么是Owin rememberBrowser做什么?

前端之家收集整理的这篇文章主要介绍了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相关文章