【问题标题】:What is the recommended way to handle one-time-password when using APIs for authentication?使用 API 进行身份验证时处理一次性密码的推荐方法是什么?
【发布时间】:2021-03-09 11:33:58
【问题描述】:

我正在使用 TDD 为 Laravel 中的身份验证系统实现 API。该系统使用一次性密码 (OTP) 方法进行身份验证。第一步,为用户颁发 OTP 令牌并存储在 session 中。第二步,服务器从用户接收一个包含 OTP 令牌的请求,并检查接收到的 OTP 令牌是否与存储在 session 中的相同。

我为用户向服务器发送无效 OTP 令牌的场景编写了一个测试,但我在测试中无权访问服务器 session,因此我无法将无效令牌与会话进行比较价值。

有没有比使用会话更好的方法来实现这一点?测试中有没有办法访问服务器session

谢谢大家。

【问题讨论】:

    标签: laravel api session tdd one-time-password


    【解决方案1】:

    数据库

    为 OTP 的用户表添加一列

    第 1 步:

    • 生成 OTP 并发送给客户
    • 在数据库中存储 OTP

    第 2 步:

    • 服务器通过 OTP 接收来自用户的请求
    • 与数据库中的值进行比较并从数据库中删除

    优点:设置简单

    缺点:额外的数据库查询,需要记住删除它,即使在向用户发出 OTP 后用户的请求从未发出

    缓存

    第 1 步:

    • 生成 OTP 并发送给用户
    • 在缓存中存储 OTP
    Cache::put("otp-{$user->id}", OTP, now()->addMinutes(5));
    

    第 2 步:

    • 服务器接收来自用户的请求

    • 检查缓存中的值

    优点:设置简单,OTP 可以自动销毁

    缺点:缓存管理成为应用程序的重要领域

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 2020-12-03
      相关资源
      最近更新 更多