谷歌身份验证器扫描时条码无效
Posted
技术标签:
【中文标题】谷歌身份验证器扫描时条码无效【英文标题】:Google authenticator invalid barcode on scan 【发布时间】:2014-08-07 04:59:58 【问题描述】:这是我生成二维码的代码
public function getUrl($user, $hostname, $secret)
$encoder = "https://chart.googleapis.com/chart?chs=200x200&chld=M%70&cht=qr&chl=";
$encoderURL = sprintf( "%sotpauth://totp/%s@%s",$encoder, $user, $hostname);
$finalEncodorURL = $encoderURL . "%26secret=". urlencode($secret);
return $finalEncodorURL;
据说这会生成一个二维码,确实如此。但是当我使用谷歌身份验证器应用程序扫描此代码时,它会产生错误
The barcode 'otpauth://totp/user4@noemail.com&secret=UOPKN6QFW3J6PW74' is not a valid authentication barcode.
但是当使用密钥“手动输入”时,它会起作用,我可以使用生成的密钥正常登录。
我在互联网上找到了一些东西,说我应该对数据进行 urlencode,我做到了,但它仍然不起作用。
这是上面函数生成的示例 url:
https://chart.googleapis.com/chart?chs=200x200&chld=M%70&cht=qr&chl=otpauth://totp/user4@noemail.com%26secret=UOPKN6QFW3J6PW74
我错过了什么或做错了什么?
【问题讨论】:
【参考方案1】:只需将&secret=
替换为?secret=
(不要忘记进行网址编码)。
我也不知道这里是否是这种情况,但帐户名不能有空格。如果您使用 android 进行扫描,但 iPhone 则不行(想想看!)
【讨论】:
已确认... ios 应用不喜欢空格。 :(【参考方案2】:Google 和 IOS Authenticator 应用似乎都不喜欢 OTP QR 码中“帐户名称”中的空格。将它们替换为 - 或 _ 或删除它们。
Windows 手机应用程序允许空间,并且我在 6 个月前安装在 Android 手机上的版本可以正常工作。我没有机会测试 IOS,但看起来 IOS 有问题。手动输入密钥可以正常工作,但不能扫描带有空格的二维码。
【讨论】:
【参考方案3】:您应该完全对您传递给图表 API 的数据进行 URL 编码。
otpauth%3A%2F%2Ftotp%2Fuser4%40noemail.com%26secret%3DUOPKN6QFW3J6PW74
这应该确保数据被正确编码。
【讨论】:
我确实对数据进行了完整的 url 编码,但它不起作用。这是二维码的完整网址chart.googleapis.com/…【参考方案4】:将二维码 URL 中的空格替换为 %20。此问题仅在 Google Authenticator iOS App 中出现。在 Android 中,它无需替换空格即可工作。
【讨论】:
以上是关于谷歌身份验证器扫描时条码无效的主要内容,如果未能解决你的问题,请参考以下文章
请问我的华为手机为啥不能进行谷歌身份验证(已生成验证码但不能用)?