使用 API 进行身份验证时,推荐的处理一次性密码的方法是什么?
What is the recommended way to handle one-time-password when using APIs for authentication?
我正在使用 TDD 为 Laravel 中的身份验证系统实现 API。该系统使用一次性密码 (OTP) 方法进行身份验证。第一步,为用户颁发一个 OTP 令牌并存储在 session
中。在第二步中,服务器接收到来自用户的包含 OTP 令牌的请求,并检查接收到的 OTP 令牌是否与存储在 session
.
中的相同。
我已经针对用户向服务器发送无效 OTP 令牌的场景编写了测试,但我在测试中无法访问服务器 session
,因此我无法比较无效针对会话值的令牌。
有没有比使用会话更好的方法来实现这个?测试中有没有访问服务器session
的解决方案?
谢谢大家
数据库
为 OTP
的用户 table 添加一列
第 1 步:
- 生成 OTP 并发给客户
- 在数据库中存储 OTP
第 2 步:
- 服务器收到来自用户的 OTP 请求
- 与数据库中的值进行比较并从数据库中删除
优点:设置简单
缺点:额外的数据库查询,需要记住删除它,即使在向用户请求发出 OTP 之后从未发出用户请求
缓存
第 1 步:
- 生成并向用户发出 OTP
- 在缓存中存储 OTP
Cache::put("otp-{$user->id}", OTP, now()->addMinutes(5));
第 2 步:
服务器收到来自用户的请求
检查缓存中的值
优点:设置简单,OTP 可以自动销毁
缺点:缓存管理成为应用程序的重要领域
我正在使用 TDD 为 Laravel 中的身份验证系统实现 API。该系统使用一次性密码 (OTP) 方法进行身份验证。第一步,为用户颁发一个 OTP 令牌并存储在 session
中。在第二步中,服务器接收到来自用户的包含 OTP 令牌的请求,并检查接收到的 OTP 令牌是否与存储在 session
.
我已经针对用户向服务器发送无效 OTP 令牌的场景编写了测试,但我在测试中无法访问服务器 session
,因此我无法比较无效针对会话值的令牌。
有没有比使用会话更好的方法来实现这个?测试中有没有访问服务器session
的解决方案?
谢谢大家
数据库
为 OTP
的用户 table 添加一列第 1 步:
- 生成 OTP 并发给客户
- 在数据库中存储 OTP
第 2 步:
- 服务器收到来自用户的 OTP 请求
- 与数据库中的值进行比较并从数据库中删除
优点:设置简单
缺点:额外的数据库查询,需要记住删除它,即使在向用户请求发出 OTP 之后从未发出用户请求
缓存
第 1 步:
- 生成并向用户发出 OTP
- 在缓存中存储 OTP
Cache::put("otp-{$user->id}", OTP, now()->addMinutes(5));
第 2 步:
服务器收到来自用户的请求
检查缓存中的值
优点:设置简单,OTP 可以自动销毁
缺点:缓存管理成为应用程序的重要领域