我正在开发一个可靠的令牌生成和验证系统,主要用于确认电子邮件中的链接(重置密码请求、更改电子邮件流、激活帐户等)。
有几件事是强制性的:
令牌在系统(数据库中)中必须是唯一的(即使同时生成两个)
令牌必须是一次性使用
- 令牌必须有过期
- 令牌无法猜测
从那我决定生成这样的令牌:
token = sha256(user.id + time + uuid(v4) + secret)
该令牌不需要携带任何过期信息,因为它与外部的那些列一起保存在数据库中。
- 这个令牌是否符合我以上几点要求?如果没有,如何修改我的方法?
- 如果这个令牌符合我的要求,有没有办法在实现我的目标的同时简化它?
我问这个,因为我知道这些类型的一次性使用令牌发送到电子邮件有一些已知的漏洞,我不确定我是否安全。