【发布时间】:2019-09-27 06:47:28
【问题描述】:
我正在我的 REST API 中实现基于 JWT 的身份验证系统,并希望在令牌中使用 JWT_ID 声明。根据Auth0,JWT ID 允许一个令牌使用一次:
jti(JWT ID):唯一标识;可用于防止 JWT 正在重放(允许一个令牌只使用一次)
我想知道 JWT ID 应该多久重新生成一次?
- 在每个请求中
- 仅在登录时
- 令牌刷新时(如果使用刷新令牌系统)
注意:我没有使用 Auth0 进行身份验证。
【问题讨论】:
我正在我的 REST API 中实现基于 JWT 的身份验证系统,并希望在令牌中使用 JWT_ID 声明。根据Auth0,JWT ID 允许一个令牌使用一次:
jti(JWT ID):唯一标识;可用于防止 JWT 正在重放(允许一个令牌只使用一次)
我想知道 JWT ID 应该多久重新生成一次?
注意:我没有使用 Auth0 进行身份验证。
【问题讨论】:
请记住,jti 声明用法是可选,因此您根本不需要使用它。但是,当您需要在白名单或黑名单中跟踪令牌时,它非常有用。
我想知道 JWT ID 应该多久重新生成一次?
我不知道你说的 regenerate 是什么意思。
应在生成令牌时分配jti 声明的值。一旦令牌是signed,就没有办法在不使签名失效的情况下修改它。因此,如果您在每个请求中为令牌分配一个新 id,则必须再次签署该令牌,因此您最终会为每个请求获得一个新令牌。
以下是jti 声明在RFC 7519 中的定义方式:
jti(JWT ID)声明为 JWT 提供了唯一标识符。标识符值的分配方式必须确保相同的值被意外分配给不同的数据对象的概率可以忽略不计;如果应用程序使用多个发行者,则必须防止不同发行者产生的值之间的冲突。jti声明可用于防止 JWT 被重放。jti值是区分大小写的字符串。使用此声明是可选的。
根据我对您的用例的了解,在客户端进行身份验证和客户端刷新令牌时发出新令牌(具有唯一 ID,例如 UUID)是有意义的。
值得一提的是,jti 声明本身对令牌重放没有任何作用。但是,它为您提供了识别令牌并在白名单或黑名单中跟踪它们的方法。
【讨论】:
jwt_id 只能在登录和令牌刷新时生成。最好使用 expireIn 和 maxAge 来量化令牌的有效期。
【讨论】: