【问题标题】:Sliding Expiration with Identity Server 4 and ASP.NET Core使用 Identity Server 4 和 ASP.NET Core 滑动过期
【发布时间】: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


    【解决方案1】:

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

    只需添加UseTokenLifetime = false;

    MSDN ref


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

    【讨论】:

      猜你喜欢
      • 2021-01-22
      • 2018-06-03
      • 2018-12-16
      • 2019-06-02
      • 2021-04-19
      • 2018-01-24
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      相关资源
      最近更新 更多