Security 我应该在数据库中保留所有UUIDv4生成的oAuth2承载令牌以防止攻击吗?

Security 我应该在数据库中保留所有UUIDv4生成的oAuth2承载令牌以防止攻击吗?,security,oauth-2.0,uuid,client-side-attacks,Security,Oauth 2.0,Uuid,Client Side Attacks,我生成oauth2访问和刷新令牌,并将它们存储在数据库中。我使用UUIDV4生成这些令牌并删除破折号。我过去常常在令牌过期后删除它们,但现在我存储了所有这些令牌,因为我想到了可能发生的事情 如果攻击者在本地存储为其生成的所有访问令牌,并不断使用这些访问令牌进行授权,该怎么办。因为我作为DB管理员正在删除生成的令牌,所以DB无法知道令牌是唯一的。因此,如果UUIDv4算法为不同的用户生成一个访问令牌,并且这是一个冲突(与以前生成的UUID相同),并且攻击者发现了该冲突,那么他可以进入服务,因为他拥

我生成oauth2访问和刷新令牌,并将它们存储在数据库中。我使用UUIDV4生成这些令牌并删除破折号。我过去常常在令牌过期后删除它们,但现在我存储了所有这些令牌,因为我想到了可能发生的事情

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

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

我还担心如果我保留了所有的令牌,它会使数据库膨胀,因为访问令牌每小时都会过期,并且在用户下一次执行操作时会重新生成


感谢您的帮助强> UUID的整个点在实践中是唯一的,只要考虑“通用唯一标识符”的名称即可。要计算碰撞的可能性,请参见,例如,我不会坐着等待碰撞发生

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