【问题标题】:How does TOTP work if I need to store the OTP in DB?如果我需要将 OTP 存储在数据库中,TOTP 如何工作?
【发布时间】:2018-12-26 11:12:26
【问题描述】:

我有一个要求

  1. 第三方提供商 (TPP) 想要使用 OTP 访问 Rest Endpoint。
  2. 因此,TPP 请求一个 service1,该 service1 反过来调用一个 service2,该 service2 生成一个 OTP,在 DB 中针对该 OTP 存储与该请求相关的用户特定数据,并将 OTP 返回给 TPP。这些 OTP 在一段时间内有效,例如6 分钟。到目前为止一切顺利,现在我的问题如下

  3. 我只能生成 6 位数的 OTP。我正在使用 Java.Crypto.mac。我收到很多重复的 OTP。什么是最好的算法,以减少获得重复的概率。我从https://github.com/jchambers/java-otp/blob/master/src/main/java/com/eatthepath/otp/HmacOneTimePasswordGenerator.java得到了提示

使用相同的逻辑。我使用 jmeter 对单线程进行了测试,5000 次我得到了近 500 个重复的 OTP

  1. 我读到 TOTP 在客户端服务器方法中工作。我不明白在我的场景中没有这样的客户。有没有办法不将 OTP 存储在 DB 中?

  2. 此外,如果我将所有 OTP 保存在 DB 中,它们也会在某个时候耗尽。

我已经阅读了几乎所有关于 XOR128、TOTP、HOTP 的文章,但有些东西我想不明白。请帮我解决这个问题。

【问题讨论】:

    标签: java one-time-password totp


    【解决方案1】:

    我看到了几种可能的方法。

    第一个是 TOTP,你根本不需要存储 OTP,你只需要存储一个密钥,用于生成 OTP。

    第二个选项(常用)是为您的客户提供 API 密钥,每次他们发送请求时,他们需要使用某种哈希算法生成访问密钥。哈希函数的来源应该是一个包含 API 密钥和当前时间步长的字符串。 这是来自顶级 OTP 提供商之一的 API 指令,您可以在第 5 页“授权”中找到描述方法的示例:https://www.protectimus.com/images/pdf/Protectimus_API_Manual_en.pdf

    【讨论】:

      猜你喜欢
      • 2015-05-24
      • 2016-12-28
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多