【问题标题】:JavaScript Object Notation Web Token Expiring Time CheckerJavaScript 对象表示法 Web 令牌过期时间检查器
【发布时间】:2018-02-18 12:54:57
【问题描述】:

如果用户仍在向系统 API/服务器发出请求,我如何确保用户访问令牌不会过期?

是否可以根据用户向服务器发出的每个请求刷新JWT 的到期日期?

【问题讨论】:

    标签: api jwt access-token


    【解决方案1】:

    OAuth2 使用包含用户数据的短期 access token 和用于询问的长期 refresh token获取新的访问令牌

    只是指出您只能在服务器端更改 JWT 的数据(或更准确地说是创建一个新的)。即使其数据可公开访问,其签名也是基于其内容。所以如果它的内容被修改了,就得用私钥重新签名,否则就失效了。 它的目的不是隐藏数据(JWE/JWS 除外),而是确保接收它的服务器以及任何客户端请求是真实的(由服务器创建,这要归功于它的私钥,或者由第三方认证服务)。 (对不起,如果你已经很清楚了)

    如果您要实现一些特定且有限的安全性,并且想要一些简单的东西,您可以在服务器端保留一些关于令牌过期的信息(例如在数据库表中),并发送一个新的信息以及响应如果您检测到它即将过期(并且如果 Authorization 标头的令牌正常)。

    否则,您可以实施一些客户端轮询,定期请求新令牌(或者更好,但更复杂的服务器推送)。

    我还研究了一个实现失败并重试的解决方案:如果令牌被服务器拒绝(5 分钟后),客户端会联系身份验证服务(该服务具有所提供令牌的注册表,带有更长的过期时间),这提供了一个新的令牌。之后,客户端重试了请求。

    我还研究了一个实现,正如您所建议的,每个响应都会发送新的令牌......有点。我们还将令牌列表保存在注册表中,只是为了确保对于收到的令牌只会发送一个新令牌(以确保该系统不会增加授权令牌)。收到后,先前的令牌被禁用(但有一个宽限期:它们仍然有效一分钟,以确保并行调用能够到达服务器),同时提供一个新的令牌。该系统还确保同一用户不能同时在不同设备上使用该应用程序(令牌的范围是每个用户,任何以前的用户令牌都被删除)。 请注意,使用这样的系统,开发、调试、重放请求变得很痛苦......

    不是安全专家,我不能保证我的回答是万无一失的。也许你很快就会得到更好的 cmets。

    有一些常见的安全模式,例如 OAuth,您可以在其中找到有关 OWASP 的信息、安全专家圣经以及对您有很大帮助的第三方解决方案,例如 Auth0(看看他们的文章,它们是金矿),但软件/安全架构师永远不会错过设计自己的自定义安全实施的机会(......并重新发明轮子)。

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 2019-03-03
      • 2019-01-30
      • 2021-12-21
      • 2017-11-01
      • 2012-04-17
      相关资源
      最近更新 更多