无法将idsrv cookie设置为超时而不是持久性

时间:2017-07-12 20:13:44

标签: identityserver3

我有一个问题,我的idsrv cookie似乎永远不会有物理到期时间。因此共享计算机上的用户正在相互登录,因为 nobody 似乎关闭了他们的浏览器以杀死此cookie。

有人可以说明我应该做些什么吗?

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要使用持久性Cookie来设置过期时间,这会将cookie保留在浏览器会话上,但也允许您设置过期时间。你没有提到你正在使用哪个版本的ASP.NET,但这里是使用aspnet核心的一个例子(这里的第三个参数必须为true才能保留cookie):

var result = 
    await _signInManager.PasswordSignInAsync(model.Email, model.Password, true, true);

还有其他方式可以登录,但不管怎样,你都会有一个重载,允许你设置持久标志。

然后在其他地方你需要在设置cookie选项时设置到期时间,你可以指定到期时间,例如:如果使用Asp.Net Identity:

services.AddIdentity<ApplicationUser, IdentityRole>(
    o => o.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromMinutes(30));

(请记住,如果您处于核心状态,并且升级到或使用v2.0,则需要使用services.ConfigureApplicationCookie,请参阅here)。

当然,这可能无法消除您的用户在到期时间内交换机器,但您可以使到期时间变小。你还可以做的是在到期时使用SlidingExpiration标志:

  

SlidingExpiration设置为true,以指示中间件在处理到期时间超过到期时间的请求时,以新的到期时间重新发布新cookie。

意味着您可以减少到期时间,只要用户仍处于活动状态,他们就会获得新的Cookie。所以上面的代码可以调整为:

services.AddIdentity<ApplicationUser, IdentityRole>(o =>
    {
        o.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromMinutes(10);
        o.Cookies.ApplicationCookie.SlidingExpiration = true;
    });