关于安全:临时存储用户密码

Storing a user password temporarily

我有一个用例,用户注册我的服务,然后通过电子邮件确认他们的注册。我遇到的问题是,我必须等到确认电子邮件后才能创建帐户(这是一个我无法更改的外部要求),所以我必须将密码存储在某个地方,以便可以以纯文本形式检索。

最好的方法是什么?想到的解决方案是加密并存储在redis中,直到用户进行身份验证,然后创建帐户并删除redis条目。

这是最好/最安全的方法吗?


更改过程:不要预先要求密码,先进行地址验证。

注册表单只接受电子邮件地址,并在链接中将令牌发送到电子邮件地址。通常是这样的:

1
http://.../[email protected]&expires=nnn&sig=xxx

其中nnn是一个时间戳,在该时间戳之后,链接将变得无用,而xxx是HMAC(serversecret, email+timestamp),因此您可以进行身份验证。

通过链接,他们可以得到一个带有密码字段和任何其他详细信息的注册页面。

(奖励:如果您有忘记密码的旅程,请使用相同的过程,因此遵循该链接可获得注册页面或恢复帐户页面。)