2

我正在使用 TwoFactorAuth.net 显示用于扫描到身份验证器应用程序的 QR 码。如果我在“标签”参数中使用名称,则此方法有效。但是,如果我在创建 QR 码时使用电子邮件地址作为“标签”,Microsoft Authenticator 将使用电子邮件中的域作为颁发者,而不是提供的颁发者。

也就是说:EX 1 - 不是电子邮件(即示例代码):

  • 私有只读 TwoFactorAuth tfa = new TwoFactorAuth("MyCompany", qrcodeprovider: new QRCoder.QRCoderQRCodeProvider());
  • Model.GetQrCodeImageAsDataUri("Bob Ross", (string)Session["secret"])"

结果: 名称标签

EX 2 - 电子邮件标签:

  • 私有只读 TwoFactorAuth tfa = new TwoFactorAuth("MyCompany", qrcodeprovider: new QRCoder.QRCoderQRCodeProvider());
  • img src="@Model.GetQrCodeImageAsDataUri("mypaint@thebobross.com", (string)Session["secret"])"

结果: 电子邮件标签

但是,电子邮件在 Google Authenticator 中可以正常工作: 谷歌身份验证器

有任何想法吗?

4

1 回答 1

0

这是标准的Key Uri 格式

otpauth://TYPE/LABEL?PARAMETERS

我找不到有关 Microsoft Authenticator 如何解析otpauth URI 的任何实质性信息,但在测试了不同的方法后,我得出的结论是,如果仅将电子邮件地址作为 LABEL 给出,Microsoft Authenticator 就会选择存在的任何 TLD 的子域。实际上,Wiki还说域名的不同部分称为标签,所以可能这就是那里的逻辑。

无论如何,我通过在电子邮件地址之前将Issuer添加为 LABEL 来解决它(注意“:”分隔符)。

"MyCompany:mypaint@thebobross.com"

我已经使用 Microsoft 和 Google Authenticator 成功测试了这一点。两者都将MyCompany显示为 LABEL。

于 2022-03-02T09:41:55.697 回答