【问题标题】:Authentication flow with node.js使用 node.js 的身份验证流程
【发布时间】:2021-07-20 02:57:54
【问题描述】:

我正在构建身份验证微服务,通过电子邮件确认,问题是过去,我使用随机生成的字符串 (crypto.randomBytes(20).toString('hex')) 它工作得很好,直到 gmail 决定包含指向我的网站链接的 zoho 电子邮件(托管在aws上,并且逐个配置(SPF,DKIM,zoho说明中提到的所有内容),zoho建议,在Route53中)应该进入垃圾邮件,这就是为什么我必须紧急切换到代码身份验证,我发送5-用户必须确认的 6 位代码,正如我在许多网站中看到的那样,这很常见(这是我在这个微服务 atm 中使用的),我生成随机数,迭代用户,检查是否有任何用户该代码,如果有再做一次,但是如果它超过了在配置文件(3)中定义的最大迭代次数,则中断循环,现在我看到的问题是,即使最大 6 位数是 999999,它也可能成为问题扩大,许多同时用户注册延迟验证ication + 攻击者向用户代码发送垃圾邮件,它很快就会成为麻烦,即使我有单独的微服务来清理过期代码,如果用户多次遇到现有代码存在(UX 问题),什么是标准解决方案?这?我在谷歌上搜索了它,但没有发现什么特别的,而且大多数样板都使用编码字符串。

【问题讨论】:

  • 不要遍历查看提供代码的用户。相反,要求用户提供电子邮件和代码,然后您只需查找该用户。重复代码也不再有问题。此外,请确保为代码提供较短的有效时间(例如,15 分钟后不再有效)并在几次尝试失败后延迟用户以阻止垃圾邮件发送者并防止资源耗尽。
  • 谢谢,看来是有道理的。
  • 在此处阅读有关链接/令牌的部分:codeproject.com/Articles/5300920/authentication-flows-js

标签: node.js authentication email-verification


【解决方案1】:

首先,您可以使用 zoho 以外的其他电子邮件提供商。例如,AFAIK mailgun、SMTP2GO 和sendinblue 不会被谷歌识别为垃圾邮件。

其次,大多数网站不会同时要求用户提供代码和电子邮件。所以我不确定是否要再次询问用户他的电子邮件。我会搜索令牌(如您所述),但是一旦找到它,我就会将其删除,因此将来它不会与生成的相同令牌发生冲突,另外还要确保不会多次使用此令牌。

只需确保在您的数据库中也为令牌编制索引,这样搜索将是最佳的。

如果您想使用一个使用您提到的“样板”的包(但您不必编写代码,而只是依赖此包),您可以使用https://www.npmjs.com/package/authentication-flows-js

【讨论】:

  • 好点@OhardR,虽然我认为没有必要再次询问电子邮件,但我们可以轻松地将电子邮件存储在 redux 甚至本地存储中并使用它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 2017-09-09
  • 1970-01-01
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多