【发布时间】:2021-04-29 19:32:26
【问题描述】:
我对 Web 应用程序上的帐户创建过程中的电子邮件验证步骤有一个想法。这是我第一次构建这样的东西,所以我只是想确保这个协议是安全的。
由于我真的不想在我的数据库中为“未验证”用户存储任何内容,因此我想到了使用 JWT 来验证用户的电子邮件地址。这是我的想法:
- 用户访问网站上的
/register端点并输入他的电子邮件(只有他的电子邮件,暂时没有用户名和密码)。 - 我在后端服务器上使用正则表达式验证电子邮件格式,并检查与域名关联的 MX DNS 记录。
- 我创建了一个 JWT,其中包含他作为唯一数据提供的用户电子邮件地址。之后,我向该地址发送一封电子邮件,其中包含指向新端点的链接:
/create?token=<generated jwt>。 (此令牌经过加密签名,可防止生成已绑定到电子邮件地址的注册链接)。 - 如果这封电子邮件属于用户,他只需点击链接,我现在就知道该地址有效。
- 用户可以在这个新的
/create端点上完成他的注册,他将被要求提供用户名和密码。
我认为这种方法会更加用户友好,因为用户不必输入他的用户名和密码两次(1:注册,2:点击电子邮件链接后登录)并且对我的数据库更有效我根本不跟踪未经验证的用户。
最重要的是,在 JWT 上设置的过期时间非常方便,因为我可以将其设置为 24 小时(创建后),链接会立即变得不可用。
我只需要在/create 端点上显示电子邮件地址,以确保有人没有将绑定到他的电子邮件地址的链接发送给其他人进行注册(这将使此人能够重置受害者的密码之后)。这很容易通过在用户名和密码提示旁边显示一个包含电子邮件地址的不可编辑字段来防止。
【问题讨论】:
标签: validation email security web jwt