1

我有一个要求

  1. 第三方提供商 (TPP) 想要使用 OTP 访问 Rest Endpoint。
  2. 因此,TPP 请求一个 service1,该 service1 又调用一个生成 OTP 的 service2,将与该请求相关的用户特定数据存储在 DB 中针对该 OTP,并将 OTP 返回给 TPP。这些 OTP 在某些 n 时间内有效,例如 。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 存储在数据库中?

  2. 如果我将它们保存在数据库中,那么在某些时候所有的 OTP 都会耗尽。

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

4

1 回答 1

0

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

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

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

于 2019-02-02T11:26:15.300 回答