我被卡住了,需要一些建议或解决方案的指针。对于我们的单点登录实现,我有一个相当简单的 IdentityServer4 设置。
三个应用程序
IdentityServer4 与 asp.net 核心身份(ID 服务器)
ASP.NET Core 2.2 MVC (client1)
ASP.NET Core 2.2 MVC (client2) MVC 客户端是使用混合授权设置的
两种情况:
- 如果用户在任何一个客户端中处于活动状态(例如客户端 1),则在该应用程序(客户端 2)中达到空闲超时后,用户不应在客户端 2 中注销。
- 如果用户在两个客户端(client1 和 client2)中都处于非活动状态,则系统应在空闲超时超过时从所有客户端(client1 和 client2)中注销用户。
场景 1:用户活跃于任一客户端。用户在客户端 1 中处于活动状态,在客户端 2 中处于空闲状态 预期行为:超过空闲超时时,系统不应从客户端 2 中注销。当前身份行为:能够在client1中继续工作,但是client2和ID服务器在空闲时间超过后导航到登录页面。
场景 2:用户在所有 2 个客户端(客户端 1 和客户端 2)中均处于非活动状态 预期行为:当空闲超时超过时,系统应从所有 2 个客户端和 ID 服务器中注销用户。
如果我仅在 ID 服务器中设置 cookie 过期时间(删除了sliderexpiration 为 true 并且 client1 和 client2 中的 cookie 过期时间),那么即使两个客户端都处于空闲状态,直到 ID 服务器过期时间超过,客户端应用程序都可以连续工作而没有过期时间,客户端应用程序正在连续工作。
我想知道是否可以实现预期的行为
客户:
.AddCookie(options =>
{
// Configure the client application to use sliding sessions
options.SlidingExpiration = true;
// Expire the session of 15 minutes of inactivity
options.ExpireTimeSpan = TimeSpan.FromMinutes(15);
})
身份证服务器:
services.AddIdentityServer(options =>
{
options.Authentication.CookieLifetime = TimeSpan.FromMinutes(15);
options.Authentication.CookieSlidingExpiration = true;
})