使用 node.js 的身份验证流程

问题描述

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

解决方法

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

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

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

如果您想使用使用您提到的“样板”的包(但您不必对其进行编码,只是为了依赖此包),您可以使用 https://www.npmjs.com/package/authentication-flows-js