【问题标题】:Cookie middleware and token lifetime in IdentityServerIdentityServer 中的 Cookie 中间件和令牌生命周期
【发布时间】:2017-07-15 04:59:20
【问题描述】:

我们有一个 IdentityServer4,一个作为客户端的 MVC 应用程序和一个作为受保护资源的 API。 Client(IdentityServer 中的类)具有以下属性:AccessTokenLifetimeIdentityTokenLifetimeAuthorizationCodeLifetime。 如果我们将这些属性设置为不同的值(想象 1 小时、2 小时和 3 小时)。这些属性与 cookie 到期时间跨度有何关系?

cookie 中间件(在 MVC 客户端上)看起来像这样,过期时间为 8 小时。 IdentityServer 上的 cookie 中间件的过期时间跨度为 10 小时。

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationScheme = "Cookies",
    AutomaticAuthenticate = true,
    ExpireTimeSpan = TimeSpan.FromHours(8)
});

如果令牌在 cookie 过期之前过期会发生什么情况,反之亦然,应该如何处理?

【问题讨论】:

    标签: asp.net-core asp.net-core-mvc identityserver4


    【解决方案1】:

    在 ASP.NET Core 中,三个令牌生命周期不影响任何客户端应用程序 cookie 生命周期。

    例外情况是,如果您使用 UseOpenIdConnectAuthentication 中间件并将 UseTokenLifetime 设置为 true,在这种情况下,cookie 生命周期将设置为身份令牌的生命周期。值得庆幸的是,在 ASP.NET Core 中,它不再像在 ASP.NET 4.x 中那样默认设置为 true(毕竟,身份令牌在 OpenID Connect 中通常是短暂的)。

    如果令牌过期,而用户仍在您的应用程序中进行身份验证,您将需要更新它们。这可以使用刷新令牌或通过某种静默刷新策略来完成,例如在 oidc-client 中找到的策略。

    【讨论】:

    • 我了解如果令牌过期,客户端需要向服务器请求一个新令牌。但是当客户端上的 cookie 过期或者是滑动 cookie 并且令牌仍然有效时会发生什么?
    • 如果客户端 cookie 在令牌之前过期,则不会发生什么特别的事情。如果它们不再经过身份验证(没有 cookie),那么它们可能不会到达需要授权的端点(使用令牌)。这种情况完全由客户端应用程序负责并决定如何处理。
    • @ScottBrady 您能否指出一些代码示例以便能够发现 core 和 net461 之间的差异
    猜你喜欢
    • 2019-06-17
    • 2018-12-23
    • 2015-01-08
    • 2017-07-25
    • 2011-05-02
    • 2020-11-06
    • 1970-01-01
    • 2016-05-15
    • 2020-03-28
    相关资源
    最近更新 更多