car*_*ten 5 two-factor-authentication laravel laravel-passport
让我有点惊讶的是,我没有找到任何关于使用护照对 Laravel 进行双因素身份验证的实际示例或最佳实践。
由于我想在用户登录 API 并接收其访问令牌时实现此步骤,因此我不确定如何以安全的方式进行处理。
目前流程如下:
username并password点击提交。由于我希望用户能够单独激活或停用 2FA(因为有些客户端可能不想使用它,有些客户端会),所以我会在表中添加一个新列来users存储 2FA 是否启用。
但接下来如何继续呢?如果用户像以前一样定期使用username和进行身份验证password,那么 API 就会知道他是否“需要”第二个身份验证步骤并返回一个标志,以便前端知道显示另一个视图来输入令牌?
感谢您的任何意见:)
快速总结我对这个问题的解决方案:我实现了一个处理 OTP 生成以及用户秘密生成的服务类。OTP 与指定标准兼容(我认为是 RFC 6238、TOTP)
如果用户针对 2FA 进行了初始化,则会生成一个秘密并将其存储到数据库中。用户必须使用通过他选择的身份验证器应用程序(例如 Google Authenticator)显示的第一个代码来验证它。所有 QR 码生成等都是由我的前端完成的,与 API 代码分开。
由于我使用 Laravel Passport 进行 API 身份验证,因此我扩展了该类TokenGuard以处理额外的 2FA 令牌 - 如果为用户启用了 2FA。否则这将被跳过。
用户使用用户名/密码组合登录后,每次成功的代码挑战都会生成唯一的 2FA 令牌,并将其发送到前端,以便在所有即将到来的请求中使用(作为单独的标头)。
这对我来说效果很好,最后我不需要实现任何第三方库!
@ml59 感谢您的意见,这帮助我解决了问题!