【发布时间】:2020-09-03 08:57:53
【问题描述】:
设置非常简单:ASP.NET Core MVC (3.1) 客户端,受 Identity Server 4 和授权代码流保护。
任务是使滑动过期:会话应在不活动 1 分钟后失效。
我应用的设置:
在客户端:
.AddCookie("Cookies", options =>
{
options.ExpireTimeSpan = TimeSpan.FromMinutes(1);
options.SlidingExpiration = true;
})
在身份服务器中:
services.AddIdentityServer(options =>
{
options.Authentication.CookieLifetime = TimeSpan.FromMinutes(1);
options.Authentication.CookieSlidingExpiration = true;
})
我目前所拥有的:滑动过期适用于客户端 cookie(因此当 30 秒以上通过时,客户端 cookie 会在后续请求中更新)。 IDSRV 也一样(当我进入登录页面时,登录,然后等待 30 多秒并刷新页面,cookie 传入请求和响应,这意味着它已更新)。但它不能协同工作。 IDSRV cookie 永远不会随着客户端上的请求而更新。
我是这样理解的:由于它们具有相同的到期时间(1 分钟),因此在客户端的 cookie 有效之前,永远不会向 IDSRV /authorize 发出请求。因此,在这种情况下,我将始终处于相同的情况 - 我可以登录到客户端,因为我有一个客户端的 cookie,并且在 1 分钟内我将退出 IDSRV,因为没有向它发出请求 - 有无法刷新它的 cookie。
好的,在这种情况下,我可以将 IDSRV 的 cookie 生命周期延长两倍(2 分钟),尽管这违背了我的要求。但即使在这种情况下,IDSRV 的 cookie 也不会滑动——所以如果我不直接触摸它,我会在 2 分钟后退出 IDSRV。我的意思是:假设我超过 1 分钟没有触摸客户端,它使我的客户端的 cookie 无效,并导致对 IDSRV 的请求。 Cookie 存在于响应中,但它没有滑动。
所以我的假设是我做错了什么。实现滑动会话的正确方法是什么?
【问题讨论】:
标签: asp.net-core cookies identityserver4