Asp.NET Identity设置持久cookie在特定时间后过期

时间:2017-02-17 14:15:34

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

我编写了以下代码,以便在订阅我的网站后刷新用户角色,如下所示:

private void RefreshUserRoles()
{
    var AuthenticationManager = HttpContext.GetOwinContext().Authentication;
    var Identity = new ClaimsIdentity(User.Identity);

    Identity.RemoveClaim(Identity.FindFirst(ClaimTypes.Role));
    Identity.AddClaim(new Claim(ClaimTypes.Role, "Subscriber"));

    AuthenticationManager.AuthenticationResponseGrant = new AuthenticationResponseGrant(
        new ClaimsPrincipal(Identity), 
        new AuthenticationProperties { IsPersistent = true}
    );
}

请注意以下代码:

AuthenticationManager.AuthenticationResponseGrant = new AuthenticationResponseGrant(
    new ClaimsPrincipal(Identity), 
    new AuthenticationProperties { IsPersistent = true}
    );

用户回到我的网站后,我将cookie设置为持久性,但我忘记设置此cookie的到期时间。我应该将此cookie设置为持续30分钟,之后应要求用户重新登录系统。

由于某些用户从不重新登录网站,这给我留下了一个问题,现在我需要在访问网站时重置浏览器中的所有用户cookie,并在取消订阅时更改其角色。我注意到有些用户取消了他们的订阅并且从未重新编写过,但他们仍然能够使用我网站上的功能...

所以我的问题是:

  1. 如何将Cookie的到期时间设置为30分钟,之后将要求用户重新登录系统。

  2. 如果用户长时间没有过期,如何设置重新检查用户的Cookie,以便我们可以在取消订阅时将其重置为普通用户?

1 个答案:

答案 0 :(得分:1)

这是我正在谈论的ConfigureAuth方法:

public void ConfigureAuth(IAppBuilder app)
{
    app.CreatePerOwinContext(ApplicationDbContext.Create);
    app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
    app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);

    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/Controller/Action"),
        Provider = new CookieAuthenticationProvider
        {
            OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
            validateInterval: TimeSpan.FromMinutes(30),
            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
        }
    });            
    app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

    app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));

    app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);
}

我是如何设置的,它对我有用。