4

对于一个项目,我实施了 OTP 第二因素身份验证。一切正常,我能够为加密种子生成二维码,在 Android 智能手机上读取它,并使用生成的 6 位数代码在我的应用程序中进行身份验证。我读到 FreeOTP 的 v1.5 现在支持向每个服务添加图像,引用:

在 Android 上,我们发布了一个主要版本,它带来了许多新功能和 UI 改进。其中最大的是图像支持。可以为每个令牌选择图像。图像也可以通过未记录的 OTP URI 查询参数提供给设备。

我看到某些服务确实成功地为其服务添加了图像(例如 OVH),但找不到合适的 URI 语法来执行此操作……更准确地说,我不是要求手动添加图像的方法对于 FreeOTP 应用程序中的令牌,我正在寻找正确的 URI 来生成 QRCode,该 QRCode 最好包含指向要显示的图像的链接。我很确定我从未为 OVH 手动添加图像。

4

1 回答 1

5

参考您要在 FreeOTP 中使用的图像生成 QR 码的正确 URI 包括指向其公开可用位置的查询字符串参数:

...&image=http<s>://<image-path>

图片应为 .png。完全限定路径和协议。

将此添加到已为 QR 码创建的现有字符串中。在生成 QR 码之前,您必须对整个字符串进行 UrlEncode。

为清楚起见,urlencoding 之前的数据格式应为:

otpauth://totp/(<issuer>:)<accountnospaces>?secret=xxxxxxxxxx(&issuer=<issuer>)(&image=<imageuri>)

括号表示可选元素。例如:

otpauth://totp/Google:SampleName?MQ2TQNLEGMYTMOBXGY3Q&issuer=Google&image=http://google.com/image/logo.png

然后你对其进行urlencode:

otpauth%3A%2F%2Ftotp%2FGoogle%3ASampleName%3FMQ2TQNLEGMYTMOBXGY3Q%26issuer%3DGoogle%26image%3Dhttp%3A%2F%2Fgoogle.com%2Fimage%2Flogo.png

然后你生成一个你喜欢的二维码。例如,谷歌图表 API:

https://chart.googleapis.com/chart?cht=qr&chs=400x400&chl=otpauth%3A%2F%2Ftotp%2FGoogle%3ASampleName%3FMQ2TQNLEGMYTMOBXGY3Q%26issuer%3DGoogle%26image%3Dhttp%3A%2F%2Fgoogle.com%2Fimage%2Flogo.png

虽然 FreeOTP 支持此功能,但其他应用程序不支持。它不是 TOTP 规范的一部分,尽管它应该是。

于 2018-05-18T11:12:34.177 回答