IdentityServer 中的 Cookie 中间件和令牌生命周期

Cookie middleware and token lifetime in IdentityServer

我们有一个 IdentityServer4,一个作为客户端的 MVC 应用程序和一个作为受保护资源的 API。 Client(IdentityServer 中的class)具有以下属性: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 中,三个令牌生命周期不会影响任何客户端应用程序 cookie 生命周期。

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

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

中的策略。