IdentityServer 中的 Cookie 中间件和令牌生命周期
Cookie middleware and token lifetime in IdentityServer
我们有一个 IdentityServer4,一个作为客户端的 MVC 应用程序和一个作为受保护资源的 API。
Client
(IdentityServer 中的class)具有以下属性:AccessTokenLifetime
、IdentityTokenLifetime
、AuthorizationCodeLifetime
。
如果我们将这些属性设置为不同的值(想象 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.
中的策略。
我们有一个 IdentityServer4,一个作为客户端的 MVC 应用程序和一个作为受保护资源的 API。
Client
(IdentityServer 中的class)具有以下属性:AccessTokenLifetime
、IdentityTokenLifetime
、AuthorizationCodeLifetime
。
如果我们将这些属性设置为不同的值(想象 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.
中的策略。