为什么要在asp.net身份中早于ExpireTimeSpan注销?

时间:2017-07-09 08:24:25

标签: asp.net-mvc cookies asp.net-identity

我正在使用一个使用asp.net身份的asp.net mvc应用程序 在Startup.Auth.cs文件中,我将ExpireTimeSpan设置为20天,但是当我登录到我的应用时,我的应用会在20天内注销,我必须登录agian!

Startup.Auth.cs

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/Login"),
    Provider = new CookieAuthenticationProvider
    {
        // Enables the application to validate the security stamp when the user logs in.
        // This is a security feature which is used when you change a password or add an external login to your account.  
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, User>(
            validateInterval: TimeSpan.FromMinutes(0),
            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
    },
    ExpireTimeSpan = TimeSpan.FromDays(20),
    SlidingExpiration = true
});

并在Login操作中

var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: true);

更新
当我登录时,生成.AspNet.ApplicationCookie并且它的过期日期设置为“20”天后,当我第二天打开网站时,我注销但cookie已存在。

enter image description here

这个问题的原因是什么?
提前谢谢。

1 个答案:

答案 0 :(得分:1)

以下是早于预期退出的几个原因:

  • 在同一个域中拥有多个网络应用,并且所有网络应用都有the same cookie name(Cookie名称冲突)。在这种情况下,应用A会覆盖应用B的cookie。

  • validateInterval设置为零/ TimeSpan.FromMinutes(0)时,对UpdateSecurityStamp的所有调用都会强制用户注销并立即重新登录,包括UserManager.CreateAsync,{ {1}},UserManager.RemovePasswordAsyncUserManager.UpdatePasswordUserManager.RemoveLoginAsyncUserManager.ChangePhoneNumberAsync/SetPhoneNumberAsyncUserManager.SetTwoFactorEnabledAsync。这意味着如果您更新用​​户的属性,则会调用UserManager.SetEmailAsync

  • 如果更新服务器上的UpdateSecurityStamp,它也会覆盖.NET framework。更改它会将所有已发布的cookie标记为无效。 Machine-Key是一组用于加密和解密cookie的密钥。如果您在负载均衡器后面运行,则需要确保Web场使用一致的machine-key
  • 如果您使用Cookie存储的machine-key太多,它们会变大(大于~5K),而某些浏览器会拒绝它们。所以检查发布的cookie的大小。
  • 用户可以将浏览器设置为在关闭时删除Cookie(隐私浏览)。