如何从 Identity Server 注销所有客户端?
How to logout all clients from Identity Server?
Identity Server 和两个客户端 (SSO):.Net Core MVC 和 Nodejs。
当我使用 Nodejs 客户端登录时,刷新 MVC(第二个客户端)后,我获得了已登录的 MVC 客户端。很好。
但是当我从 Nodejs 注销时,它会向 MVC 客户端发送反向通道注销 url。 Nodejs 没有注销问题。但是 MVC 客户端 - 在浏览器刷新后它会保持记录状态。
我阅读了 and 篇文章,但没有帮助。
在 MVC 启动时我写了这段代码:
options.Events = new OpenIdConnectEvents
{
OnTicketReceived = (e) =>
{
e.Properties.IsPersistent = true;
e.Properties.ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(2);
return Task.CompletedTask;
}
};
两分钟后,我刷新浏览器,MVC 重定向到 Idrsv 登录页面。它很好,但不安全(需要等待 2 分钟)。
我读到 userId claim cache,但我怀疑 - 如果有很多活动会话,那么缓存会非常大,应用程序会运行缓慢。
我可以使用前端通道注销,但我读到了缺点,现在我怀疑了。
从 Identity Server 注销所有客户端,您更喜欢什么?
在示例中,注销是在注销页面上使用 iframe 执行的。如果跳过或中止此页面,可能不会通知客户。但我不这么认为。
我更喜欢不依赖 iframe 的更安全的后端注销。看看我的回答 作为例子。
现在谈谈客户。非 javascript 客户端确实需要往返更新 cookie。所以流程是:用户从客户端 A 注销。IdentityServer 通知其他客户端(反向通道)并删除服务器 cookie。
现在(非javascript)客户必须采取行动。它还需要删除 cookie,但这只能在 用户执行操作后。
这就是缓存的用武之地。缓存仅包含来自服务器的警报。在第一次机会时,它会删除 cookie 并将用户从缓存中删除。所以缓存实际上会保持很小。请添加一些清理代码以删除使用过期 cookie 的已注销用户(从未返回)。
Identity Server 和两个客户端 (SSO):.Net Core MVC 和 Nodejs。
当我使用 Nodejs 客户端登录时,刷新 MVC(第二个客户端)后,我获得了已登录的 MVC 客户端。很好。
但是当我从 Nodejs 注销时,它会向 MVC 客户端发送反向通道注销 url。 Nodejs 没有注销问题。但是 MVC 客户端 - 在浏览器刷新后它会保持记录状态。
我阅读了
在 MVC 启动时我写了这段代码:
options.Events = new OpenIdConnectEvents
{
OnTicketReceived = (e) =>
{
e.Properties.IsPersistent = true;
e.Properties.ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(2);
return Task.CompletedTask;
}
};
两分钟后,我刷新浏览器,MVC 重定向到 Idrsv 登录页面。它很好,但不安全(需要等待 2 分钟)。
我读到 userId claim cache,但我怀疑 - 如果有很多活动会话,那么缓存会非常大,应用程序会运行缓慢。
我可以使用前端通道注销,但我读到了缺点,现在我怀疑了。
从 Identity Server 注销所有客户端,您更喜欢什么?
在示例中,注销是在注销页面上使用 iframe 执行的。如果跳过或中止此页面,可能不会通知客户。但我不这么认为。
我更喜欢不依赖 iframe 的更安全的后端注销。看看我的回答
现在谈谈客户。非 javascript 客户端确实需要往返更新 cookie。所以流程是:用户从客户端 A 注销。IdentityServer 通知其他客户端(反向通道)并删除服务器 cookie。
现在(非javascript)客户必须采取行动。它还需要删除 cookie,但这只能在 用户执行操作后。
这就是缓存的用武之地。缓存仅包含来自服务器的警报。在第一次机会时,它会删除 cookie 并将用户从缓存中删除。所以缓存实际上会保持很小。请添加一些清理代码以删除使用过期 cookie 的已注销用户(从未返回)。