- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用 TOTP 和 Java 中的 QR 代码实现了 2 因素身份验证,这在 Android 上运行得很好。然而,当我尝试在任何 iOS 设备上扫描二维码时,我遇到了一个非常奇怪的错误,并且到目前为止我还无法找到其原因。
看来该问题可能是由于编码不当造成的,iOS 版本的 Google Authenticator 应用不允许这种情况,但这只是猜测。
我收到的错误消息是:
the barcode is not a valid authentication token barcode
这是代码
public String generateQRUrl() {
String secret = "hXYmnYsVWoEAXjKuAZcj";
String QR_PREFIX = "https://chart.googleapis.com/chart?chs=200x200&chld=M%%7C0&cht=qr&chl=";
try {
return QR_PREFIX + URLEncoder.encode(
String.format("otpauth://totp/%s:%s?secret=%s&issuer=%s",
"Test X", "test@gmail.com", secret, "Issuer Y"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "";
}
我已经为 URLEncoder 尝试了多种不同的组合,但到目前为止,没有一个有效。在我看来,iOS 应用程序不喜欢某种特殊字符,正如此 C# 线程 ( click ) 中所建议的那样,但有人知道如何解决此问题吗?
谢谢!
最佳答案
生成的 QR 码和 Google 的 iOS Authenticator 应用程序也存在同样的问题。双重编码为我解决了这个问题:
@Test
void useUriUtils() throws UnsupportedEncodingException {
String encodedString = UriUtils.encodeFragment("HELLO WORLD", "UTF-8");
assertEquals("HELLO%20WORLD", encodedString);
String doubleEncoded = UriUtils.encodeFragment(encodedString, "UTF-8");
assertEquals("HELLO%2520WORLD", doubleEncoded);
}
或者作为 URL 示例,而不是将字符串 HELLO WORLD
中的空格编码为 HELLO%20WORLD
,如以下 URL 所示:
https://chart.googleapis.com/chart?chs=200x200&cht=qr&chl=otpauth://totp/HELLO%20WORLD%3Aalexander.pietsch%40foo.com%3Fsecret%3DJFWMPPNUIPG7CAOL%26issuer%3DHELLO%20WORLD
将其双重编码为HELLO%2520WORLD
:
https://chart.googleapis.com/chart?chs=200x200&cht=qr&chl=otpauth://totp/HELLO%2520WORLD%3Aalexander.pietsch%4040foo.com%3Fsecret%3DYLCDNEHV5MSIOI5A%26issuer%3DHELLO%2520WORLD
最后一个将被 iOS Google Authenticator 应用程序接受。
关于java - TOTP 二维码适用于 Android 但不适用于 iOS 设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51113066/
在设备上:如果现在生成 TOTP,它会持续到最后几秒还是四舍五入到最接近的 00? 例如,如果我在 22hr:30m:2s:33ms 生成一个 TOTP(在 UTC 中检查),它是否四舍五入为 2
我正在尝试对我的 Web 应用程序实现基于时间的一次性密码,但我遇到了一些问题。我正在使用 Google 的 Android 应用程序“Google Authenticator”对其进行测试,但我无法
如果手机时钟/日历由于某种原因关闭了很长一段时间,会发生什么情况。 TOTP(基于时间的 OTP)算法是否生成无效 token ?时区是否也在 token 正确中发挥作用,或者客户端和服务器是否都与
我想在 JSON 响应中发送我的作业要点:{要点:“”,电子邮件 :””}使用 TOTP(基于时间的一次性密码)方法的 API。有什么解决方案吗? 最佳答案 虽然你必须自己做,但如果你投入了很多时间但
totp = pyotp.TOTP("base32secret3232") totp.at(time.time(),60) print("Current OTP:", totp.now()) otp=
我正在使用 Node + Redis 进行 TOTP 验证,并试图弄清楚如何实现时钟漂移同步。我正在使用硬件设备来生成 TOTP 密码/ token ,但在验证 token 时需要考虑这些硬件设备的时
我发现每个 TOTP 实现(甚至 RedHat 的 FreeOTP)都使用 Base32 编码/解码来生成其 secret 。为什么不使用 Base64,因为 Base32 多使用大约 20% 的空间
我正在使用 notp 在我的 Node 应用程序中生成一个简单的 token : var notp = require('notp') notp.totp.gen("ciao", {}) // =>
我很难弄清楚如何使用这个库: https://github.com/aws-amplify/amplify-js/tree/master/packages/amazon-cognito-identit
当我尝试在 ubuntu 16 上安装 pgAdmin4 时遇到问题 :( 和 pip install passlib 不要帮助我。有人知道如何解决吗? from pgadmin.model
KeePassXC支持从密码管理器本身生成 TOTP。但是,许多网站往往不为其提供手动配置 key ,除非像 AWS 这样的网站很少。 是否可以从 QR 码本身导出此配置 key ?我尝试扫描二维码,
KeePassXC支持从密码管理器本身生成 TOTP。但是,许多网站往往不为其提供手动配置 key ,除非像 AWS 这样的网站很少。 是否可以从 QR 码本身导出此配置 key ?我尝试扫描二维码,
我是 Swift 自动化测试的新手。我想使用 TOTP 通过 2SV。我们是否有任何函数可以获取 key 并生成 TOTP 代码。 我有一个 python 脚本来生成 TOTP 代码。无论如何它可以在
我正在构建一个基于 TOTP/HOTP 的双因素身份验证系统。为了验证 otp,服务器和 otp 设备都必须知道共享 key 。 由于 HOTP 密码与用户密码非常相似,我认为应该应用类似的最佳实践。
我尝试将 TOTP PHP 库作为登录表单的另一种身份验证。我从 github 下载并按照安装说明进行操作如以下代码: now(); ?> 然而,我最终得到了错误消息 Warning: Unsuppo
我希望将我的网站 (C#/SQL 2008) 设置为允许使用 Google Authenticator 进行两因素身份验证。我的网站正在运行,从获取二维码到生成上一个/当前/下一个 key (我很乐意
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
我已经使用 TOTP 和 Java 中的 QR 代码实现了 2 因素身份验证,这在 Android 上运行得很好。然而,当我尝试在任何 iOS 设备上扫描二维码时,我遇到了一个非常奇怪的错误,并且到目
我正在尝试编写一个生成 6 位数字 TOTP 的 bash 代码。我写了下面的代码: ##!/bin/bash T=`date '+%Y%m%d%H%M'` K="secret" prefix="(s
我想在我的网站上使用 2fa 的谷歌验证器和 totp 算法。我有 2 个关于生成 QR 密码的问题。 我计划使用保险库来存储 secret 以更加安全,但我的问题是有没有其他方法可以每次生成 sec
我是一名优秀的程序员,十分优秀!