JWT身份验证方案中的刷新令牌是否应该使用与访问令牌不同的密钥进行签名



我有一个非常简单的问题,基本上如标题所述。

当实现包含短期访问令牌和长期刷新令牌的JWT身份验证方案时,这两种令牌类型是否应该使用不同的密钥进行签名

我最近对这个身份验证方案有了更多的了解,在我的阅读中,我没有对这个问题提出强烈的意见或结论性的答案。一些简短的谷歌搜索和Stack Overflow也没有产生任何有意义的答案。

感谢您抽出时间!

答案:

为什么

我们所说的2个代币是

  1. 访问令牌
  2. 刷新令牌

据我所知,在加密方面,HMAC、RSA或ECDSA都没有密钥使用的上限。因此,使用同一密钥签名是完全合理的,以防止存在伪造。

但是,如果您的访问令牌和刷新令牌颁发端点位于不同的服务器上,则从密钥管理安全角度来看,您可能希望使用不同的机密进行签名,以包含两个机密中的一个。

我的直觉告诉我要把两个记号的秘密分开。但不是因为安全原因。我的意思是,如果其中一个秘密泄露了,那么你就完了。如果有一两个秘密,攻击面也是IMHO。

对我来说,保密的原因是可用性和错误预防。开发人员有时倾向于做一些愚蠢的事情,比如混合一些东西。有一天,开发人员将尝试发送一个刷新令牌来代替访问令牌。如果机密不同,令牌将被简单地拒绝。如果秘密是一样的——接下来会发生什么超出了我的想象(所以我想防止这种情况发生(。

从密码方面来看,我同意接受的答案。

但需要考虑的一点是,如果您使用的是相同的机密,您应该关心如何验证刷新令牌。如果您只是检查JWT是否有效,那么可以发送一个访问令牌作为刷新令牌,并从以前的有效访问令牌中获得一个新的访问令牌。

因此,您应该使用不同的机密,或者注意在JWT主体中指定并验证一个标志,指示这是访问令牌还是刷新令牌。

最新更新