如何使用QR图像测试两因素身份验证

时间:2019-09-19 17:55:10

标签: ruby-on-rails ruby

我目前正在为Rails应用添加两因素身份验证。我添加了一个过程,该过程允许用户使用QR码验证自己身份,从而启用两因素身份验证。我正在使用这个gem:https://github.com/Houdini/two_factor_authentication,它使您可以生成可转换为QR码的预配置uri。然后,用户可以使用Authy或Google身份验证器之类的应用程序对此进行扫描,以获取一次性密码。

我现在需要为此编写测试,因此我需要能够自动从配置uri获取安全代码的过程,而无需使用应用程序进行扫描。< / p>

所以我的问题是:是否可以通过编程方式扫描QR码来获取密钥,如果可以,怎么办?

该应用基于Ruby on Rails 5.2。

2 个答案:

答案 0 :(得分:0)

当您要测试来自特定gem的功能时,在大多数情况下,您可以在原始存储库中找到一些线索。流行的宝石通常经过良好的测试。在这里https://github.com/Houdini/two_factor_authentication/blob/master/spec/lib/two_factor_authentication/models/two_factor_authenticatable_spec.rb#L182

答案 1 :(得分:0)

您有两个选择:

  1. 找到一种在Ruby中读取QR的方法。这与用户必须执行的操作最相似,但是可能很难(我不知道-我从未做到)。

  2. 自己生成6位代码(“ TOTP代码”)。感觉有些棘手(我想并深入了一些实现细节),但比方法1容易做。

对于选项2,可以使用rotp宝石(Houdini自己使用)和通过Houdini生成的秘密密钥。

secret_key = user.generate_totp_secret

# then...

totp = ROTP::TOTP.new(secret_key)
totp.now # --> the 6-digit code

(您可以看到Houdini如何使用rotp宝石here。)