【问题标题】:Log out user after inactivity with JWT Access and Refresh tokens使用 JWT 访问和刷新令牌不活动后注销用户
【发布时间】:2017-08-18 16:23:51
【问题描述】:

我使用 Angular 2 在 Web 应用程序中实现了身份验证机制。

我将使用 JSON Web Token。两种类型的令牌,访问令牌(短期)和刷新令牌(长期),此处描述:https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/

想要获得结果,这在使用会话/cookie 时很常见。 用户一段时间不活动后,用户将退出。这基本上意味着浏览器显示登录页面,并且在使用 JWT 的情况下,令牌将从浏览器 localStorage 或存储 cookie 中删除。

我看不到如何做到这一点,仅依赖于访问和刷新令牌。

当访问令牌过期时(例如,每 10 分钟一次),使用刷新令牌(每 8 小时过期一次)请求新的令牌。但是当用户不活动时怎么办,例如。 1小时?刷新令牌仍然有效,因此下一次用户交互将导致获取新的访问令牌并且用户仍然可以使用该应用程序。

也许有一些 Angular2 或 JavaScript 机制可以在用户不活动的情况下执行某些操作或重定向到登录页面?

【问题讨论】:

  • 您找到解决此问题的方法了吗?

标签: angular authentication web-applications jwt json-web-token


【解决方案1】:

您可以实施一些客户端规则,即每当访问令牌到期时将它们重定向到登录页面,或者您可以锁定用户的屏幕以再次提供输入凭据。请查看 angular2 JWT 的功能

【讨论】:

  • 如果你的解决方案(可以想象的最简单的解决方案)是可以接受的......你怎么看......我会写两种类型的令牌吗?我写过有关访问和刷新令牌的文章,但您写了“让用户每 10 分钟登录一次”。最重要的是……您的答案如何与我询问的用户不活动相关联?打个比方……我问的是漂流的技巧,但你告诉我红色意味着停止,绿色意味着驱动。
  • 很抱歉没有清楚地理解您的问题。 JWT 中缺少像您的问题这样的功能。一种使用像 NG IDLE 这样的模块来响应空闲用户的方法。
【解决方案2】:

只需缓存上次用户活动的时间戳(对于您要运行定期检查的用户)并在刷新令牌超过您的阈值时撤销刷新令牌+从该缓存中删除用户。如果你真的需要那种行为。如果您接受服务器端解决方案。

如果您指的是 Angular 客户端解决方案,只需在给定的非活动期后忘记令牌对即可。

【讨论】:

    【解决方案3】:

    如果您想使用令牌作为标志来终止会话,请不要刷新它,只需设置较短的生命周期,当服务器回复 401 时注销用户。对于这种方法,您必须在每次用户交互后生成一个新令牌。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-08
      • 2021-12-14
      • 2021-08-23
      • 2021-10-03
      • 2020-10-15
      • 2022-12-23
      • 2019-04-12
      • 2021-09-30
      相关资源
      最近更新 更多