【发布时间】:2019-03-29 12:51:42
【问题描述】:
我正在使用 pyotp https://github.com/pyotp/pyotp 将我的应用程序与 Google Authenticator 集成。
文档建议使用 qrious https://github.com/neocotic/qrious 这很好,效果很好。本质上 qrious 能够纯粹在浏览器中生成二维码。在这种情况下,供应 URI 被传递给 QR 码生成器,并由此生成 QR 码。
让我感到困惑的是,配置 URI 包含密钥,但我们将这个 URI 发送到客户端,由 qrious 将其转换为 QR 码。所以密钥不是秘密的,因为它已经发送给客户端了。
我原以为永远不能从后端发送密钥 - 我不明白什么?
# generate a base32 secret key
>>> pyotp.random_base32()
'55OZSEMXLL7VAUZP'
# make a provisioning_URI
>>> provisioning_URI = pyotp.totp.TOTP('55OZSEMXLL7VAUZP').provisioning_uri('someperson@example.org',issuer_name="FooCorporation")
>>> provisioning_URI
'otpauth://totp/FooCorporation:someperson%40example.org?secret=55OZSEMXLL7VAUZP&issuer=FooCorporation'
>>>
provisioning_URI 被发送到浏览器以转换为 QR 码 - 但它包含密钥 - 这肯定不安全吗?
【问题讨论】:
-
此上下文中的密钥是服务器和客户端之间的共享密钥。每个客户都不同。
-
所以秘密不是应用程序范围的秘密?是否需要为该用户存储在数据库字段中,并在用户向后端提交 Google Authenticator 代码时检索以进行验证?
-
您将需要它来验证代码。
标签: python authentication one-time-password