jti索赔应多久重新生成一次?

时间:2019-05-09 12:19:23

标签: node.js express jwt

我正在我的REST API中实现基于JWT的身份验证系统,并希望在令牌中使用JWT_ID声明。根据{{​​3}},JWT ID允许令牌使用一次:

  

jti(JWT ID):唯一标识符;可以用来防止JWT   被重播(令牌只能使用一次)

我想知道应该重新生成JWT ID多久一次?

  • 根据每个请求
  • 仅在登录时
  • 关于令牌刷新(如果使用刷新令牌系统)

注意::我没有使用Auth0进行身份验证。

2 个答案:

答案 0 :(得分:1)

请记住,jti声明用法是可选,因此根本不需要使用它。但是,当您需要以白名单或黑名单形式记录令牌时,此功能非常有用。

  

我想知道应该多久重新生成一次JWT ID?

我不确定您所说的 regenerate 是什么意思。

在生成令牌时应分配jti声明的值。而且一旦令牌为signed,就无法在没有使签名无效的情况下对其进行修改。因此,如果您在每个请求中为令牌分配了新的ID,则必须再次对令牌进行签名,因此最终将为每个请求获得一个新的令牌。

RFC 7519中定义jti声明的方式如下:

  

4.1.7. jti (JWT ID) Claim

     

jti(JWT ID)声明为JWT提供了唯一的标识符。标识符值的分配方式必须确保将相同值偶然分配给不同数据对象的可能性很小。如果应用程序使用多个发行者,则还必须防止不同发行者产生的值之间发生冲突。 jti声明可用于防止重播JWT。 jti值是区分大小写的字符串。使用此声明是可选的。


底线

根据我对您的用例的了解,当客户端进行身份验证以及客户端刷新令牌时,发出一个新令牌(具有唯一ID,例如UUID)是很有意义的。

值得一提的是,jti自己声明 对令牌重放没有任何作用。但是,它为您提供了识别令牌并以白名单或黑名单对其进行跟踪的方法。

答案 1 :(得分:0)

def func(x): res = 0 for i in range(x): res += i return res print(func(4)) 仅应在登录令牌刷新时生成。最好使用 expireIn maxAge 来量化令牌有效期。