【问题标题】:Is my JWT refresh plan secure?我的 JWT 更新计划安全吗?
【发布时间】:2015-08-23 12:39:48
【问题描述】:

我计划将 JWT 用于我的移动设备登录系统。我找不到用于刷新 JWT 令牌的真正标准工作流程,因此我在下面创建了这个。我想使用 JWT 的原因是出于性能原因。我信任 JWT,而不是检查用户是否对每个请求的数据库调用有效。

我有建议的工作流程,我想在我的应用中实施。这是可以接受的安全吗?高效的?我正在监督有什么明显的问题吗?可以做出哪些合理的改进?

用户登录

  1. 如果本地存储中不存在 HMAC 签名令牌,则用户为设备命名。
  2. DeviceName 被发送到将其插入数据库的服务器。
  3. DeviceName 的 JWT 令牌 + HMAC 签名令牌发送回给用户。放置 HMAC 签名令牌以确保 jwt 令牌(包含 DeviceName)是从最初调用它的同一设备发送的。
  4. JWT 令牌的有效期为 X 小时,因此用户可以在 X 小时内拨打任何电话。
  5. X 小时后,JWT 过期。当发出请求时,服务器可以看到 JWT 已过期。服务器现在将尝试刷新 JWT 令牌。服务器检查数据库以查看 HMAC 签名令牌中指定的 DeviceName 是否与数据库中该用户的有效设备名称相同。
  6. 如果是,则创建新的 JWT,有效期为 X 小时,如果否,则发回消息要求登录。

如果帐户被盗:

用户可以登录我的密码服务。登录后,我会检索该用户的所有设备,然后用户可以撤销他们被入侵的设备。完成此操作后,刷新 JWT 的请求将无法使用被盗令牌。

所有这些当然都是通过 SSL 进行的。

我无法解决的问题:

  • 如果 JWT 令牌被盗,攻击者有 X 小时的时间根据受害者进行调用。我认为这是代币的本质,也是可接受的风险?

  • 如果 JWT 被盗,这意味着包含设备名称的 HMAC 令牌很可能也被劫持,因此用户可以刷新令牌,直到受害者意识到他们的帐户被盗并撤销访问权限。这是公认的做法吗?

【问题讨论】:

    标签: security authentication oauth token jwt


    【解决方案1】:

    加密的第一条规则是“不要推出自己的加密”https://security.stackexchange.com/questions/18197/why-shouldnt-we-roll-our-own

    看看https://jwt.io上提供的各种库

    我不是加密专家,所以我不会说你的计划/工作流程正确或没有缺陷。 但是一些一般的cmets: 1) 如果我将两个设备标记为“计算机”会怎样? 您是否考虑过如果每个人都将设备称为“电话”会发生什么?每个人都会拥有相同的 HMAC 设备令牌吗?

    5) X 小时后 JWT 令牌过期,现在刷新是不是太晚了,定义一个清晰的刷新窗口。 例如。令牌在 X 小时后过期,然后无法刷新,请在 X-1 小时后尝试刷新。

    您的第一个担忧:一旦令牌被盗,为时已晚。 目的是保护令牌,这样一开始就不会发生这种情况。

    您的第二个顾虑: 如果我设法得到了你的一个令牌,假设我得到了两个。 如果我有你的令牌,我就是你,我可以刷新令牌。 您可以考虑设置最大过期时间或最大刷新次数来限制这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-07
      • 2020-01-12
      • 2021-08-10
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 2014-08-16
      • 2020-10-16
      相关资源
      最近更新 更多