5

好的,我花了 2 个小时在谷歌上搜索它是什么以及如何在 Web 应用程序中使用它!但没有成功。

大多数链接都涉及扫描代码或在 GoogleAuthenticar 移动应用程序中输入一些密钥,它会每 30 秒返回一次更改的验证码。

一些事情 :

  1. web应用程序有它自己的登录。这意味着用户不会使用 Google 登录到 webapp。
  2. 如果攻击者获得了用户的密码,他会将二维码视为下一步,他可以使用手机中的 GoogleAuthenticator 应用程序直接扫描(就我而言)。它如何仅与用户的手机相关联?
  3. 在各个站点中,它提到了用户和服务器之间的共享密钥,这意味着在注册时,我们为用户提供了共享密钥,他可以在她的移动 GoogleAuthenticator 应用程序中使用它,然后在读取 QR 码时使用它?
  4. 在上述情况下,如果用户丢失或忘记了密码,该如何处理?使用忘记密码将密码再次发送到用户的电子邮件?

当它是一个非谷歌非安卓应用程序时,我对如何以一种方式实现它感到困惑!

我所得到的是,这只是一个概念,要求我们在 GoogleAuthenticator 的源代码的帮助下实现自己的实现。请纠正我?

我认为的解决方案是,我们必须编写自己的移动应用程序,就像这里提到的这个人一样虽然我仍然不确定移动应用程序和服务器之间的秘密将如何每个人都是独一无二的安装该应用程序,使其仅识别特定用户,或者有什么方法可以编写我们自己的应用程序并使用 GoogleAuthenticator 移动应用程序,而无需在我们的 web 应用程序中使用 Google 登录?

4

1 回答 1

7

Google Authenticator(移动应用程序)实现了基于时间的一次性密码算法。在您询问的场景中,两因素身份验证的工作方式如下:

  • 用户生成一次性密码以供服务器应用程序验证。
  • 服务器将使用 TOTP 算法详述的过程来验证密码。

用户设备上的密码生成可以由任何实现 TOTP 的应用程序执行,该应用程序已为您的用户帐户“配置”。 正如您在问题中提到的那样,在此处配置意味着与服务器共享了一个秘密。

现在,尝试回答您的问题:

  1. 您的应用程序使用自己的一组用户凭据或 Google 的这一事实对双因素身份验证没有直接影响。无论这些凭据是什么,您都需要一种方法来识别您的用户(用户名),以便能够继续验证其 TOTP 密码,因为您需要知道用户是谁。换句话说:使用 TOTP 和使用 Google Authenticator 应用程序并不意味着必须在您的网站上使用 Google 凭据。

  2. 我不确定我是否理解正确。每个帐户的 Google Authenticator 应用程序的配置只执行一次。如果攻击者正坐在您的背后,并在您配置 Google Authenticator 时拍摄您的屏幕照片,那么是的,他可以使用您的凭据配置自己的应用程序,并读取您正在使用的相同条形码。尽管如此,他还需要您的凭据(正确的)才能执行登录,然后提供一次性 TOTP 密码。无论如何,这是一个安全问题,源于用户如何不正确地处理自己的凭据,无论您使用何种技术,您都可能遇到类似的问题。做一个不完美的比喻,就像问“如果用户将带有密码的密码卡留在桌子上,攻击者看到它并窃取了它的照片,它可以使用它们吗?”。当然,他可以。

  3. 是的,读取条形码是您可以配置应用程序并在客户端应用程序和服务器之间共享秘密的方法之一。您可以使用其他方式,例如在应用程序中手动输入密钥,但使用 QR 码更快且更不容易出错。您甚至不需要生成 QR 码,因为您可以使用 Google 的 Web API,正如我在您让我回答这个问题时正在阅读的博客文章中解释的那样。事实上,那里描述的 Java 服务器端库使用 Google Web API 并返回一个 URL 供用户签出并阅读其自己的 QR。如果您想构建自己的 QR 逻辑,请继续,但如果您有资格使用 Google 的 API(无论如何您都应该检查),就没有令人信服的理由应该这样做。

  4. 如果秘密丢失,则取决于您自己的策略,如果它是您自己的应用程序。首先,您应该在收到用户通知后立即使旧密码失效。然后,您可以使用您在创建 TOTP 密码时提供给用户的临时代码来验证他自己的身份。如果他也丢失了暂存代码,您可能希望使用其他方法来验证他的身份,例如在他的帐户中使用某种备份信息(备份电话号码、安全问题等)。根据您的标准验证用户身份后,您将发布新的凭据并从头开始:即使用新的 QR 和/或新的密钥重新配置 Google Authenticator。

总结一下:是的,如果您愿意,您可以使用 Google Authenticator 应用程序作为您的客户端前端:无需构建另一个。唯一需要考虑的是 Google Authenticator 在其 TOTP 实现中使用 30 秒窗口:验证 TOTP 密码的服务器端逻辑必须使用相同的窗口大小(即 IIRC,由TOTP RFC)。

于 2014-04-10T15:17:11.263 回答