在我的邮件中收到的OTP的TOTP验证

时间:2016-04-07 13:41:02

标签: email authentication one-time-password

我正在构建一个Java Web应用程序,生成TOTP(使用TOTP算法)并通过邮件发送。我该如何验证呢? 通过我的广泛研究,我可以发现所有论文都显示了移动设备认证(Google Authenticator等),我的应用程序在任何情况下都不使用移动设备,只是一个简单的OTP认证(在用户邮件ID中收到)

OTP生成函数如下: OTP.generate(“”+ key,“”+ System.currentTimeMillis(),6,“totp”)

3 个答案:

答案 0 :(得分:1)

请参阅RFC,然后您就知道如何验证Otp值。 https://tools.ietf.org/html/rfc6238

如果您通过电子邮件发送OTP值,服务器可以保存并记住它发送的值。

或者当用户输入OTP值时,您可以根据键重新计算值。 如果您只通过电子邮件发送值,那么您也可以发送任何随机字符串。

但也许您想要采用更常见的方法 - 为什么不允许使用TOTP的Google身份验证器和硬件令牌?

但是如果您正在构建Web应用程序,那么您可能希望在后台使用更通用的解决方案。 privacyIDEA是一个开源解决方案,从一开始就具有所有这一切。使用Google Auth TOTP,硬件令牌或OTP通过电子邮件和短信。无需重新发明轮子。

答案 1 :(得分:1)

当代码生成器(通常是移动或桌面应用程序,如Google身份验证器)和代码验证程序(身份验证服务器)是两个不同的实体时,TOTP非常有用。 在您的情况下,应用程序同时充当代码生成器和代码验证器,因此在这种情况下我将使用不同的方法。你看过HOTP了吗? TOTP实际上基于HOTP,不同之处在于虽然后者使用显式计数器作为移动因子(即基于事件的移动因子),但TOTP的移动因子基于自纪元以来经过的时间不断变化。 (即基于时间的移动因子)。

答案 2 :(得分:0)

您在通过电子邮件发送基于时间的 OTP 代码时可能会遇到的一个问题是发送代码和接收代码之间的潜在延迟。鉴于 OTP 代码必须在短时间内输入,如果此延迟太大,则代码将无法使用。