4

我生成 oauth2 访问和刷新令牌并将它们存储在我的数据库中。我使用 UUID v4 生成这些令牌并删除破折号。我曾经在令牌过期后删除它们,但现在我将它们全部存储起来,因为我想到了可能发生的事情。

如果攻击者在本地存储了为他生成的所有访问令牌,并且他不断地一次又一次地使用这些访问令牌进行授权,该怎么办。由于我作为数据库管理员正在删除生成的令牌,因此数据库无法知道令牌是唯一的。因此,如果 UUIDv4 算法为不同的用户生成访问令牌并且这是一个冲突(与之前生成的 UUID 相同)并且攻击者发现了该冲突,他可以进入服务,因为他拥有之前生成的令牌。

我的问题是我应该担心这一点并保留我的所有令牌以防发生冲突以检查唯一性,还是应该在它们过期后删除访问和刷新令牌并相信 UUIDv4 有足够的熵来防止这种情况发生?

我还担心,如果我保留所有令牌,它将使数据库膨胀,因为访问令牌每小时到期一次,并且在用户下次采取行动时重新生成。

任何帮助表示赞赏!

4

1 回答 1

2

尽管理论上 UUID 冲突的可能性很小,但 UUID的全部意义在于在实践中是唯一的,只需考虑名称“通用唯一标识符”即可。要计算碰撞的可能性,请参阅此链接,我不会坐等它发生。;-)

我不希望您生成足够的 UUID 来实现即使是一次碰撞的实际机会。如果您仍然这样做,那么在数据库中存储这么多访问令牌也可能是个问题,它可能需要大量存储空间。如果你仍然害怕冲突,我建议生成比 UUID 更独特的东西,但避免将它们全部存储在数据库中。

于 2014-05-14T07:20:29.877 回答