标准 JWT 声明(RFC 7519 §4.1.7)之一是"jti",它是令牌的唯一标识符。如果您在刷新令牌中包含唯一标识符,则足以将"jti"和"exp"(到期)声明存储在数据库中。(我默认使用("github.com/satori/go.uuid").NewV4将 生"jti"成为随机 UUID,这是由"crypto/rand"随机数生成器内部支持的。)
现在,如果您收到一个刷新令牌,您可以进行通常的检查以确保它已正确签名和未过期,然后"jti"在数据库中查找。如果它不在黑名单上,那么它有利于重复使用。您只需要保留"exp"在数据库中即可知道何时可以安全地清除记录。由于"jti"只是一个随机标识符,您无法从 返回"jti"任何可识别信息,因此没有特别需要对其进行散列或加密。
如果您没有"jti"并且无法添加,我可能会散列令牌或仅保留声明的副本。部分原因是出于空间原因,部分原因是您不想存储实际上是有效凭据的内容。保留足够的信息,您可以唯一地识别令牌;可能"sub"和"exp"时间一起是足够的信息(如果发给同一主题的两个令牌在同一秒到期是无法区分的)。