首页 文章

我的JWT刷新计划是否安全?

提问于
浏览
1

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

我有我想要在我的应用程序中实现的建议工作流程 . 这可以接受吗?高效?我在监督是否有任何明显的问题?可以做出哪些合理的改进?

用户登录

  • 如果localstorage中不存在HMAC签名令牌,则用户为设备指定名称 .

  • DeviceName被发送到将其插入数据库的服务器 .

  • 将设备名称的JWT令牌HMAC签名令牌发送回用户 . HMAC签名令牌用于确保jwt令牌(包含DeviceName)是从最初调用它的同一设备发送的 .

  • JWT令牌在X小时内有效,因此用户可以进行X小时的任何调用 .

  • X小时后,JWT已过期 . 发出请求时,服务器可以看到JWT已过期 . 服务器现在将尝试刷新JWT令牌 . 服务器检查数据库以查看HMAC签名令牌中指定的DeviceName是否与该用户的数据库中的有效设备名称相同 .

  • 如果是这样,创建新的JWT有效期为X小时,如果没有,则发送回要求登录的消息 .

如果帐户遭到入侵:

用户可以登录我的密码服务 . 登录后,我将检索该用户的所有设备,然后用户可以撤销其受感染的设备 . 完成此操作后,刷新JWT的请求将无法与被盗令牌一起使用 .

所有这一切当然都是通过SSL发生的 .

我对我没有解决方案的担忧:

  • 如果JWT令牌被盗,攻击者有X小时根据受害者拨打电话 . 我认为这是令牌的性质和可接受的风险?

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

1 回答

  • 0

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

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

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

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

    你的第一个问题:一旦令牌被盗,为时已晚 . 目的是保护令牌,以便首先不会发生 .

    你的第二个问题:如果我设法得到你的一个令牌,假设我得到了两个 . 如果我有你的令牌,我就是你,我可以刷新令牌 . 您可以考虑使用最大过期或最大刷新次数来限制此操作 .

相关问题