0

我想为我的移动应用程序实现一个无密码身份验证流程,该流程只需要用户单击其电子邮件中的链接即可登录。类似于 Slack 处理身份验证的方式。我将使用nodeandjwt来实现这个实现。

我想我已经想出了一个安全的设计,但我确定我错过了一些东西。我希望得到社区的一些批评。

开始了:

  • 用户打开移动应用程序。
  • 我们检查用户的本地存储中是否有令牌。
  • 如果他们这样做,我们将该令牌添加到他们的标题中并发送到应用程序的主页。
  • 否则,我们会提示他们输入电子邮件以开始使用
  • 当他们单击“提交”时,我们将其发布email address到我们服务器上的requestMagicLink端点。
  • 服务器检查数据库中的用户email address
  • 如果我们找到使用该电子邮件的用户,我们会id从该用户那里获取
  • 如果用户不存在,我们创建一个新用户,然后获取id
  • 我们使用 JWT 生成带有 的令牌id,并且我们的令牌在secret之后过期1 hour
  • 我们通过电子邮件中的链接将该令牌发送给用户。
  • 单击后,该链接将使用查询参数向magicLogin端点的服务器发送 GET 请求token
  • 我们使用 JWT 和我们的secret.
  • 如果验证失败,我们会将用户重定向到我们用电子邮件提示他们开始使用的屏幕。
  • 如果成功,我们使用 theirid和我们的secretthat生成一个新的 JWT 令牌doesn't have an expiration,然后在 URL 的参数中将其传递回用户,将用户重定向到我们应用程序中的成功页面。
  • 该应用程序从参数中获取令牌并将其存储在本地存储中,直到用户选择注销,并且用户被重定向到主页。
  • 对 api 的请求现在都在标头中包含令牌,用户可以开始了。
4

0 回答 0