Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.Net标识未持久化cookie MVC6 vNext_Asp.net_Asp.net Mvc_Asp.net Identity_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

ASP.Net标识未持久化cookie MVC6 vNext

ASP.Net标识未持久化cookie MVC6 vNext,asp.net,asp.net-mvc,asp.net-identity,asp.net-core,asp.net-core-mvc,Asp.net,Asp.net Mvc,Asp.net Identity,Asp.net Core,Asp.net Core Mvc,我正在从事一个MVC6 ASP.Net5项目,在登录时.Net Identity持久化我的身份验证cookie时遇到问题 我正在使用一个自定义用户存储,这是一个现有的数据库与现有的存储过程等 我的SignIn方法是对我的用户对象的扩展,如下所示 public static async Task SignIn(this UserModel Model, UserManager<UserModel> UserManager, SignInManager<UserModel>

我正在从事一个MVC6 ASP.Net5项目,在登录时.Net Identity持久化我的身份验证cookie时遇到问题

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

我的SignIn方法是对我的用户对象的扩展,如下所示

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 });
    }
public static async Task SignIn(此UserModel模型,UserManager UserManager,SignInManager SignInManager,bool RemeberMe=true)
{
var索赔=新列表();
添加(新声明(“UserID”,Model.UserID.ToString());
添加(新的索赔(“用户名”,Model.Username));
wait UserManager.AddClaimsAsync(模型,声明);
等待SignInManager.SignInAsync(模型,新身份验证属性{IsPersistent=RemeberMe,AllowRefresh=true});
}
这是可行的,并且添加了一个cookie,其中包含将来的到期日期。

我面临的问题是,即使身份cookie在未来很长一段时间内被设置,在20分钟的不活动之后,我还是不得不重新登录。这让我觉得有些东西超时了,但我对身份非常陌生,不知道自己做错了什么(甚至不知道从哪里开始)

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

public Task<string> GetSecurityStampAsync(UserModel user, CancellationToken cancellationToken)
    {
        return Task.FromResult(user.UserID.ToString() + user.Username);
    }
公共任务GetSecurityStampAsync(UserModel用户,CancellationToken CancellationToken) { 返回Task.FromResult(user.UserID.ToString()+user.Username); }
确保已根据您的要求设置超时。Identity 2.1中有两种超时配置(
ExpireTimespan
ValidateInterval
)会影响用户可以登录的时间。您可以使用以下方式配置它们:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
   Provider = new CookieAuthenticationProvider
    {
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
            validateInterval: TimeSpan.FromMinutes(15)
    },
    ExpireTimeSpan = TimeSpan.FromMinutes(30)
});
app.UseCookieAuthentication(新的CookieAuthenticationOptions
{
Provider=新CookieAuthenticationProvider
{
OnValidateIdentity=SecurityStampValidator.OnValidateIdentity-有点过时,但仍应适用于撰写本文时发布的最新版本的ASP.NET Core(rc1)

如果您正在使用会话,也可能是您的会话正在超时或已清除

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


如果您使用的是SQL Server,这里有一个很好的入门方法。

Uhhm..要不要解释一下否决票?我确实认为这是对这个问题的一个非常相关的答案..我不是否决票的人,所以我不确定这是从哪里来的。这篇文章很有趣,但我没有使用会话(不要将其作为中间件)@mituw16啊..明白了..你的GetSecurityStampAsync在你的自定义存储中是什么样子的?我知道这不安全,但我现在只是想让它工作。一旦我了解问题所在,我会回来更改它。我编辑了我的问题以发布该方法哈,这很有趣。在调试过程中,似乎在某个时候,我我还不知道什么时候,我的持久化cookie会被一个新cookie替换,它是会话cookie。