【问题标题】:Adding 2FA to Laravel Passport based API将 2FA 添加到基于 Laravel Passport 的 API
【发布时间】:2023-03-15 08:29:01
【问题描述】:

我很惊讶我没有找到任何关于使用护照的 laravel 双重身份验证的实际示例或最佳实践。

由于我想在用户登录 API 并收到他的访问令牌时执行此步骤,所以我不确定如何以安全的方式进行操作。

目前的流程如下:

  1. 用户看到前端登录页面 (vue SPA)。
  2. 用户输入usernamepassword并点击提交。
  3. SPA 向 API 发送请求。
  4. API 会使用访问令牌进行响应,如果出现问题,则会给出未经身份验证的错误。
  5. SPA 可以使用访问令牌从 API 请求其他资源,直到令牌失效。

由于我想让用户单独激活或停用 2FA(因为有些客户可能不想使用它,有些客户会),如果启用 2FA 或不是。

但是接下来如何继续呢?用户是否应该像以前一样定期使用usernamepassword 进行身份验证,然后API 知道他是否“需要”第二个身份验证步骤并返回一个标志,以便前端知道显示另一个视图以输入令牌?

感谢您的任何意见:)

【问题讨论】:

  • 您可能想先验证用户身份,以便知道哪个用户启用了 2FA。此外,如果密码错误,没有必要要求 2FA,所以先验证用户身份,然后要求 2FA(或不要求)
  • 在所有后续请求中,我也会检查第二个令牌(如果启用了 2FA),对吧?
  • 您可以使用中间件进行该检查。你也可以利用 Laravel Fortify,因为它可以处理 2FA

标签: laravel laravel-passport two-factor-authentication


【解决方案1】:

快速总结一下我对这个问题的解决方案:我已经实现了一个服务类来处理 OTP 生成以及用户机密生成。 OTP 与指定标准兼容(我认为是 RFC 6238,TOTP)

如果为 2FA 初始化用户,则会生成一个秘密并将其存储到数据库中。用户必须使用通过他选择的身份验证器应用程序(如 Google Authenticator)显示的第一个代码来验证它。 所有的二维码生成等都是由我的前端完成的,它与 API 代码分开。

当我使用 Laravel Passport 进行 API 身份验证时,我已经扩展了 TokenGuard 类来处理额外的 2FA 令牌 - 如果为用户启用了 2FA。否则将被跳过。

在用户使用其用户名/密码组合登录后,每次成功的代码质询都会生成此 2FA 令牌,并发送到前端以在所有即将到来的请求中也使用(作为单独的标头)。

这对我来说效果很好,最后我不需要实现任何第三方库!

@ml59 感谢您提供的帮助我解决问题的意见!

【讨论】:

  • 您在某处有代码示例吗?我正在处理一个类似的实现问题。
  • 抱歉,代码归我工作的公司所有,我不允许在这里分享。但是,如果您在 Google 上搜索 laravel otp two factor,您会发现一些非常好的教程,它们朝着相同的方向发展!
猜你喜欢
  • 2019-04-26
  • 1970-01-01
  • 2021-03-03
  • 2018-01-11
  • 2018-09-03
  • 2018-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多