那是什么?.. 我将把它们存储在访问令牌中,而不是存储生成的访问令牌详细信息,如 user_id,expiry_time,user_ip等,在数据库中。本身即可。因此,每次用户请求更新时,我都可以避免数据库查询。
我正在考虑遵循API策略:
如果加密失败,我们可以将其视为无效的访问令牌。
优点: 每次用户请求新数据时都不需要进行数据库查询。所以,节省了时间和资源。
我没有发现这种方法有任何漏洞/问题。那是我在这里!请提供宝贵的反馈意见!
注意: 我不知道这是否是访问令牌的常用方式。对不起,如果是。
答案 0 :(得分:1)
请勿将 可逆加密 交给用户。您将需要为所有用户使用相同的加密密钥,这意味着您有一个非常非常秘密的密钥,您必须确保保密。如果此密钥泄漏,任何用户都可以通过重新创建令牌方案并选择任意用户ID来体现任何其他用户。由于您将密码数据传递给用户,因此他们可以轻松地对其进行离线攻击(例如,只需尝试数据上的任何和所有密钥组合,直到成功解密)。一旦通过这种方式发现密钥,除了更改密钥之外,您无需追索。
相反,使用哈希,它专门用于减缓这种暴力攻击,使其在实践中变得不可能。使用 签名的令牌 实现此目的。这意味着,您使用相同的信息(用户ID,IP,时间戳),您添加随机生成的值,您使用您的密钥对所有这些进行哈希,并发送除密钥之外的所有这些部分给用户。
// user_id,ip,timestamp,random_token,hash
42,127.0.0.1,12345678,oiawd8juht4mp9384,q209c8yqc23n09rhcq823n9t87q432hnq9493q784gth
信息都可以是明文的,因为它本身没有意义,并且它被哈希验证,如果没有密钥则不能伪造。为此目的使用昂贵的HMAC hash。