【问题标题】:Is there a way to end all sessions for a subject ID?有没有办法结束主题 ID 的所有会话?
【发布时间】:2020-12-01 07:06:11
【问题描述】:

我想做的是在用户更改/重置密码时结束用户的所有会话(使用 ASP.NET Core Identity)。我在 SPA 中使用 oidc-client-js 库。我已经弄清楚如何结束用户的当前会话并导致同一会话中的任何选项卡(例如,同一浏览器窗口中的其他选项卡)通过检查会话 iFrame 识别会话结束,但是任何其他会话(例如在隐身窗口中)似乎仍然可以运行会话,即使它们的刷新令牌/对该主题 ID 的所有持久授权都已被撤销。

是否有某种方法可以使 iFrame 返回给所有会话的会话结束的客户端,例如 iFrame 页面可能正在检查该会话的持久授权或其他什么?如果当前发布的 access_token 继续工作(它们是短暂的),我没关系,但只是希望刷新令牌无效并结束会话。

【问题讨论】:

    标签: identityserver4


    【解决方案1】:

    选项 1

    有一个 OpenID Connect Session 草案规范可以满足您的需求 - 它允许前端客户端通过 iframe 检查当前会话状态。这是一个草案,但可能不会由 ASP.NET Core Identity 实现。

    https://openid.net/specs/openid-connect-session-1_0.html

    选项 2

    以编程方式解决问题的另一种机制是检查您的令牌交换代码。您的访问令牌可能会相对较短,因此前端必须定期获取新的访问令牌(例如通过刷新令牌或通过隐式流上的 id 令牌。

    在您的令牌交换中,您可以检查上次更新密码的时间戳。

    如果它比颁发令牌时的时间戳更新,那么您可以返回 401 并通过您选择的机制管理对您的身份验证端点的重定向,而不是颁发新的访问令牌。

    这不会立即将用户从其他浏览器窗口中注销,因为它取决于您的访问令牌的到期窗口。 If 确实具有跨浏览器工作的优势,因为它不依赖于浏览器特定的会话信息。它还可以检查被列入黑名单或更改了电子邮件地址的客户以及可能与强制重新身份验证相关的其他检查。

    对于腰带和牙套,您可以同时使用这两种技术。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 2023-02-20
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多