security - 我应该在我的数据库中保留所有 UUIDv4 生成的 oAuth2 Bearer Tokens 以防止攻击吗?

标签 security oauth-2.0 uuid client-side-attacks

我生成 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/

相关文章:

javascript - 如何使用 mongodb 脚本生成 UUID

node.js - 有没有办法在 Node.JS 中安全地存储我的 MySQL 密码?

c++ - boost::asio::const_buffer 的安全释放

javascript - 在客户端将敏感数据存储在数组中是否危险

oauth-2.0 - 蔚蓝广告 : code flow with PKCE: id_token is not enabled for the application

python - Django OAuth 工具包 "resource-owner password based"授权类型

iphone - 将移动应用程序用户与其在线个人资料联系起来的最佳方式是什么?

algorithm - 目前最安全的单向加密算法是什么?

java - eloqua Oauth 2.0 提交表单

python - 使用 SWIG 公开 boost uuid