我计划将JWT用于移动设备的登录系统。没有真正标准的工作流程来刷新我能找到的JWT令牌,所以我在下面创建了这个。我想使用JWT的原因是出于性能原因。对于每个请求,我都信任JWT,而不是检查用户是否对数据库调用有效。
我有我想要在我的应用中实现的建议工作流程。这可以接受吗?高效?我在监督是否有任何明显的问题?可以做出哪些合理的改进?
用户可以登录我的密码服务。登录后,我将检索该用户的所有设备,然后用户可以撤销其受感染的设备。完成此操作后,刷新JWT的请求将无法使用被盗令牌。
所有这一切当然都是通过SSL发生的。
如果JWT令牌被盗,攻击者有X小时根据受害者拨打电话。我认为这是令牌的本质和可接受的风险吗?
如果JWT被盗,这意味着包含设备名称的HMAC令牌很有可能也被劫持,因此用户可以刷新令牌,直到受害者意识到他们的帐户遭到入侵并撤销访问权限为止。这是接受的做法吗?
答案 0 :(得分:0)
加密的第一条规则是“不要滚动你自己的加密”https://security.stackexchange.com/questions/18197/why-shouldnt-we-roll-our-own
请看一下https://jwt.io
上提供的各种库我不是加密专家,所以我不打算说你的计划/工作流程正确或没有缺陷。 但是一些一般意见: 1)如果我将两个设备标记为“计算机”会怎样? 您是否考虑过如果每个人都拨打设备“手机”会发生什么?每个人都会拥有相同的HMAC设备令牌吗?
5)X小时后JWT令牌已过期,刷新时间不是太晚,定义一个清晰的刷新窗口。 例如。令牌在X小时后过期,然后无法刷新,尝试在X-1小时后刷新它。
您的第一个担忧:一旦令牌被盗,为时已晚。 目的是保护令牌,以便首先不会发生。
你的第二个问题: 如果我设法得到你的一个令牌,假设我得到了两个。 如果我有你的令牌,我就是你,我可以刷新令牌。 您可以考虑使用最大过期或最大刷新次数来限制此操作。