ASP.Net Identity不持久化cookie MVC6 vNext

时间:2016-02-09 19:00:29

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

我正在开发一个MVC6 ASP.Net5项目,并且在登录时持有我的身份验证cookie的.Net Identity遇到了麻烦。

我正在使用自定义用户存储,这是一个包含现有存储过程的现有数据库......

我的SignIn方法是我的User对象的扩展,如下。

public static async Task SignIn(this UserModel Model, UserManager<UserModel> UserManager, SignInManager<UserModel> SignInManager, bool RemeberMe = true)
    {
        var Claims = new List<Claim>();
        Claims.Add(new Claim("UserID", Model.UserID.ToString()));
        Claims.Add(new Claim("Username", Model.Username));

        await UserManager.AddClaimsAsync(Model, Claims);

        await SignInManager.SignInAsync(Model, new AuthenticationProperties { IsPersistent = RemeberMe, AllowRefresh = true });
    }

这样做,并且将来添加一个带有过期日期的cookie。 enter image description here

我遇到的问题是即使身份cookie在将来设置了很长时间,在20分钟不活动后,我也被迫重新登录。这让我觉得有些东西是超时的,但我对身份很新,而且我不确定我做错了什么(或者甚至不知道从哪里开始)。

修改 :这是我在自定义用户存储中的自定义GetSecurityStampAsync。我知道这不安全,甚至不做任何事情,但我只想弄清楚现在的问题是什么。我计划在它工作后再重构它。

public Task<string> GetSecurityStampAsync(UserModel user, CancellationToken cancellationToken)
    {
        return Task.FromResult(user.UserID.ToString() + user.Username);
    }

1 个答案:

答案 0 :(得分:0)

确保您已根据自己的要求设置了超时时间[s]。 Identity 2.1中有两个超时配置(ExpireTimespanValidateInterval)可能会影响用户保持登录的时间。您可以使用以下命令配置它们:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
   Provider = new CookieAuthenticationProvider
    {
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
            validateInterval: TimeSpan.FromMinutes(15)
    },
    ExpireTimeSpan = TimeSpan.FromMinutes(30)
});

这在this article中有更多解释 - 有点过时但仍应适用于此时编写的最新版本的ASP.NET Core(rc1)。

如果你正在使用会话,也可能是你的会话正在超时或被清除。

默认情况下,您会获得内存缓存。重新启动进程后,您将丢失会话对象。您需要为会话对象使用持久存储。

如果您正在使用SQL Server,那么这里有一个很好的article可以帮助您入门。