【问题标题】:How to logout all clients from Identity Server?如何从 Identity Server 注销所有客户端?
【发布时间】:2020-04-27 05:46:49
【问题描述】:

Identity Server 和两个客户端 (SSO):.Net Core MVC 和 Nodejs。

当我使用 Nodejs 客户端登录时,刷新 MVC(第二个客户端)后,我得到了登录的 MVC 客户端。很好。 但是当我从 Nodejs 注销时,它会将反向通道注销 url 发送到 MVC 客户端。 Nodejs 没有注销问题。但是 MVC 客户端 - 浏览器刷新后它保持记录。 我阅读了thisthis 的帖子,但它们没有帮助。

在 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 注销所有客户端?

【问题讨论】:

    标签: asp.net-core single-sign-on identityserver4


    【解决方案1】:

    在示例中,注销是在注销页面上使用 iframe 执行的。如果此页面被跳过或中止,则可能不会通知客户。但我认为情况并非如此。

    我更喜欢不依赖 iframe 的更安全的后端注销。以我的回答 here 为例。

    现在关于客户端。非 JavaScript 客户端确实需要往返来更新 cookie。所以流程是:用户从客户端 A 注销。IdentityServer 通知其他客户端(反向通道)并删除服务器 cookie。

    现在(非 JavaScript)客户端必须采取行动。它还需要删除 cookie,但这只有在用户执行操作之后才有可能。

    这就是缓存的用武之地。缓存只包含来自服务器的警报。在第一次机会时,它会删除 cookie 并将用户从缓存中删除。所以缓存实际上会保持很小。请添加一些清理代码以删除已过期 cookie 的已注销用户(从未返回的用户)。

    【讨论】:

      猜你喜欢
      • 2020-04-10
      • 2019-06-06
      • 2020-06-13
      • 2020-06-06
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多