我的访问令牌策略是一种好的做法还是易受攻击?

Is my Access Token strategy a good practice or vulnerable?

那又怎样?.. 而不是存储生成的访问令牌详细信息,如 user_id、expiry_time、user_ip 等,在数据库,我将把它们存储在访问令牌本身中。因此,每次用户请求更新时我都可以避免数据库查询。

我正在考虑遵循 API 策略:

如果加密失败,我们可以断定它是无效的Access Token。

优点: 当用户请求新数据时,无需每次都查询数据库。因此,节省了时间和资源。

我没有发现这种方法有任何漏洞/问题。那就是我在这里!请提供您宝贵的意见!

注意: 我不知道这是否是访问令牌工作的常见方式。抱歉,如果是的话。

不要将可逆加密交给用户。您将需要为所有用户使用相同的加密密钥,这意味着您拥有一个非常非常机密的密钥,您必须确保它保密。如果此密钥泄露,任何用户都可以通过重新创建您的令牌方案并选择任意用户 ID 来体现任何其他用户。由于您将密码数据交给用户,他们可以轻松地对其发起离线攻击(例如,只需尝试对数据进行任何和所有密钥组合,直到成功解密)。以这种方式发现密钥后,除了更改密钥外别无他法。

相反,使用 hash 专门设计用于减慢这种暴力攻击的程度,以至于它们在实践中变得不可能。使用 签名令牌 实现此功能。这意味着,你使用相同的信息(用户 ID、IP、时间戳),你添加一个 随机生成的值 ,你用你的密钥散列所有这些,然后你发送所有这些部分,除了用户的密钥。

// user_id,ip,timestamp,random_token,hash
42,127.0.0.1,12345678,oiawd8juht4mp9384,q209c8yqc23n09rhcq823n9t87q432hnq9493q784gth

信息都可以是明文的,因为它本身是没有意义的,而且是通过哈希来验证的,没有秘钥是无法伪造的。为此使用昂贵的 HMAC hash