我有一个用例注册我的服务,然后通过电子邮件确认他们的注册 . 我遇到的问题是我必须等到确认电子邮件才能创建帐户(这是我无法更改的外部要求),因此我必须将密码存储在某处,以便可以以纯文本格式检索 .
这样做的最佳方法是什么?想到的解决方案是加密它并将其存储在redis中直到用户进行身份验证,然后创建帐户并删除redis条目 .
这是最好/最安全的方式吗?
更改流程:不要提前询问密码,先进行地址验证 .
注册表只接受电子邮件地址,并通过链接将令牌发送到电子邮件地址 . 通常类似于:
http://.../verify?email=bob@example.com&expires=nnn&sig=xxx
其中nnn是一个时间戳,在该时间戳之后,链接变得无用,xxx是 HMAC(serversecret, email+timestamp) ,因此您可以进行身份验证 .
HMAC(serversecret, email+timestamp)
在链接之后获取一个包含密码字段和任何其他详细信息的注册页面 .
(奖励:如果你有一个忘记密码旅程,请使用相同的过程,因此在链接后,您会获得一个注册页面或一个恢复帐户页面 . )
1 回答
更改流程:不要提前询问密码,先进行地址验证 .
注册表只接受电子邮件地址,并通过链接将令牌发送到电子邮件地址 . 通常类似于:
其中nnn是一个时间戳,在该时间戳之后,链接变得无用,xxx是
HMAC(serversecret, email+timestamp)
,因此您可以进行身份验证 .在链接之后获取一个包含密码字段和任何其他详细信息的注册页面 .
(奖励:如果你有一个忘记密码旅程,请使用相同的过程,因此在链接后,您会获得一个注册页面或一个恢复帐户页面 . )