我生成 oauth2 访问和刷新 token 并将它们存储在我的数据库中。我使用 UUID v4 生成这些 token 并删除破折号。我曾经在 token 过期后删除它们,但现在我将它们全部存储起来,因为我想到了可能发生的事情。
如果攻击者在本地存储为他生成的所有访问 token ,并且他不断使用这些访问 token 进行授权,该怎么办?由于我作为数据库管理员正在删除生成的 token ,因此数据库无法知道 token 是唯一的。因此,如果 UUIDv4 算法为不同的用户生成访问 token 并且它是一个冲突(与之前生成的 UUID 相同)并且攻击者发现该冲突,他可以进入服务,因为他拥有之前生成的 token 。
我的问题是我应该担心这一点并保留所有 token 以防发生冲突以检查唯一性,还是应该在它们过期后删除访问和刷新 token 并相信 UUIDv4 有足够的熵来防止这种情况发生?
我还担心如果我保留所有 token ,它会膨胀数据库,因为访问 token 每小时过期并在用户下次执行操作时重新生成。
任何帮助表示赞赏!
最佳答案
尽管理论上 UUID 冲突的可能性很小, UUID 的全部意义在于在实践中是唯一的 ,只需考虑名称“通用唯一标识符”。要计算碰撞的可能性,请参见例如this link ,我不会坐等它发生。 ;-)
我不希望您生成足够的 UUID,即使是一次碰撞的实际机会也是如此。如果您仍然这样做,在数据库中存储这么多访问 token 也可能是一个问题,它可能需要大量存储空间。如果您仍然害怕冲突,我建议您生成比 UUID 更独特的东西,但避免将它们全部存储在您的数据库中。
关于security - 我应该在我的数据库中保留所有 UUIDv4 生成的 oAuth2 Bearer Tokens 以防止攻击吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23601189/