Я использую pyotp https://github.com/pyotp/pyotp для интеграции моего приложения с Google Authenticator.
В документации предлагается использовать qrious https://github.com/neocotic/qrious, это нормально и работает хорошо.По сути, qrious может генерировать QR-код исключительно в браузере.В этом случае URI инициализации передается генератору QR-кода, и из него создается QR-код.
Меня удивляет то, что URI инициализации содержит секретный ключ, и все же мы отправляем этот URIдо конца клиента будет превращен в QR-код с помощью Qrious.Таким образом, секретный ключ не является секретным, потому что он был отправлен клиенту.
Я бы ожидал, что секретный ключ никогда не должен отправляться из серверной части - что я не понимаю?
# 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'
>>>
Provision_URI отправляется в браузер для превращения в QR-код - но он включает в себя секретный ключ - конечно, это не безопасно?