【发布时间】:2018-08-20 08:50:49
【问题描述】:
iOS 上的 Google 身份验证器存在问题。我们使用以下标准代码 sn-p 来生成 TOTP 密钥
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(keySize);
byte[] byteKey = keyGen.generateKey().getEncoded();
Base32 base32 = new Base32();
return base32.encodeAsString(byteKey);
生成的代码在末尾用 = 符号填充,如下所示。
6ICU5K45MHIZCMTR3DABCDFP7XSZGV4DVTRABCOPD5RDQRGOLTGQ====
然后我们会根据这个字符串生成一个适当的二维码,但是在某些设备上扫描它时会出现问题。此代码在 Android 上使用 Google Authenticator 有效,但在使用 iOS 版本时失败,并出现以下错误...
无效的条形码
条形码“otpauth://totp/MyDomain:user@user.com?secret=6ICU5K45MHIZCMTR3DABCDFP7XSZGV4DVTRABCOPD5RDQRGOLTGQ%3D%3D%3D%3D&issuer=MyDomain”不是有效的身份验证令牌条形码。
如您所见,尾随 = 填充被编码在秘密字符串中,这似乎会导致 iOS 上的错误。不知道为什么这在 iOS 上会失败,但在 Android 上却没有,但这是我们需要添加的东西
这是 GA GitHub 上的一个老问题,似乎是同一个问题,但没有解决方案... https://github.com/google/google-authenticator/issues/267
& 这里有人通过在编码之前播种字符串解决了这个问题,但这在上面的场景中不起作用 Google Authenticator on Apple devices, certain secrets are not valid
关于这个问题的原因或可能的解决方法有什么想法吗?
【问题讨论】:
-
如果百分比encoding导致问题,那么您可能需要在收到
secret时decode。 -
我已经对此进行了测试,甚至使用 = 而不是编码字符串手动将代码输入到 GA 中,我也遇到了同样的问题。它只有在我删除尾随 = 符号时才有效,我不想这样做。太老套了,我不喜欢
标签: ios one-time-password google-authenticator key-generator base32