通过UUID生成密码重置令牌

fas*_*ser 3 java uuid base64

我正在寻找一种机制来生成用于重置用户密码的随机唯一字母数字键。

我朝这个方向进行了很多眼光检查,但看起来这不是显而易见的事情。

我已经尝试过类似的方法:

new String(encodeBase64URLSafe(UUID.randomUUID()));
Run Code Online (Sandbox Code Playgroud)

但是,在阅读以下文章之后:UUID.randomUUID()是否适合用作一次性密码?看起来这种方式并不完全正确。

如果您回答以下问题,将不胜感激:

  1. 哪种安全方法可以使用UUID生成此类令牌?
  2. 我们是否需要将UUID字符串转换为base64才能获得安全的URL,还是足以从生成的字符串中删除破折号?
  3. 在这种用途中使用此链接的机制是否正确?如何生成随机的字母数字字符串?,为什么呢?

Mag*_*gus 5

  1. 使用UUID是安全的。链接的文章只是说,对于这种安全性来说,UUID可能有点过多。但是,好吧……如果您“太”安全了,没人会怪您。

  2. UUID只是字母数字字符和破折号。因此,如果需要将其放在查询字符串或URL中,则没有任何可逃避的地方。如果需要,可以删除破折号以节省一些空间。但这不是必需的。

  3. 该机制也是安全的。两者(UUID和这一类)都将起作用。

对于这种安全性,您要做的就是确保令牌是随机生成的(甚至是部分生成的)。