Sliding Expiration with Identity Server 4 and ASP.NET Core



设置非常简单:ASP。NET Core MVC(3.1(客户端,该客户端受Identity Server 4保护,具有授权代码流。

任务是使滑动过期:会话在不活动1分钟后应无效。

我应用的设置:

在客户端:

.AddCookie("Cookies", options =>
{
options.ExpireTimeSpan = TimeSpan.FromMinutes(1);
options.SlidingExpiration = true;
})

在Identity Server中:

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作为回应,但它没有滑动。

所以我的假设是我做错了什么。实现滑动会话的正确方法是什么?

要使其工作,您还需要关闭Token Lifetime,这样您就不会覆盖仅在Cookie中间件上的SlidingExpirationm。

只需添加UseTokenLifetime = false;

MSDN参考


app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions    
{
...
UseTokenLifetime = false, 
...    
}); 

最新更新