@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”。我相信这将产生两个 cookie - 一个用户认证 cookie,另一个记住浏览器的 cookie。
在
SignInManager
中使用
SignInOrTwoFactor
时,代码(第218行)检查是否已在 cookie 中设置了“RememberBrowser”身份。
OWIN cookies 受到加密保护,加密来自于
DpapiDataProtector
(
文档)。我不是加密方面的专家,所以无法评论加密强度。我只是说,“rememberBrowser”cookie 与主认证 cookie 以相同的方式加密。
关于您重新启动 IIS、机器等的练习。你从浏览器中删除了 cookie 吗?因为如果没有,身份验证(或者更确切地说是 OWIN)会将浏览器视为已登录,即使原始用户记录已从数据库中删除。虽然用户不会长时间登录,因为默认模板 MVC 中有检查数据库中用户记录并在更改后注销的代码。
至于禁用“rememberBrowser”,始终向该参数传递
false
。第二个 cookie 将不会被设置。