【发布时间】:2023-03-22 15:38:01
【问题描述】:
我遇到了困难,需要一些建议或指向解决方案的指针。对于我们的单点登录实现,我有一个相当简单的 IdentityServer4 设置。
三个应用程序
IdentityServer4 与 asp.net 核心身份(ID 服务器)
ASP.NET Core 2.2 MVC(客户端1)
ASP.NET Core 2.2 MVC (client2) MVC 客户端是使用 Hybrid Grant 设置的
两种情况:
- 如果用户在任一客户端(例如客户端 1)中处于活动状态,则在该应用(客户端 2)中达到空闲超时后,用户不应在客户端 2 中注销。
- 如果用户在两个客户端(client1 和 client2)中都处于非活动状态,则系统应在空闲超时时间超过时从所有客户端(client1 和 client2)中注销用户。
场景 1:用户活跃于任一客户端。 用户在客户端 1 中处于活动状态,在客户端 2 中处于空闲状态 预期行为: 超过空闲超时时,系统不应从 client2 注销。 当前的身份行为: 可以在client1中继续工作,但是client2和ID server在空闲时间超过后导航到登录页面。
场景 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);
})
ID 服务器:
services.AddIdentityServer(options =>
{
options.Authentication.CookieLifetime = TimeSpan.FromMinutes(15);
options.Authentication.CookieSlidingExpiration = true;
})
【问题讨论】:
标签: asp.net asp.net-core single-sign-on identityserver4 user-inactivity