python-bna
python-bna copied to clipboard
Invalid TOTP URL for QR code
I was trying to get bna
to generate a URL, to create a QR code so I could add it to AndOTP.
However, the QR code wouldn't scan. AndOTP ('Invalid QR code'), Authy ('Invalid format, token format not supported') or FreeOTP ('The token specified was invalid') could use the QR code because of a missing colon. Google Authenticator scans it without issue.
The spec doesn't specify the colon is required.
As soon as the colon is added it works. The colon is present in the example in README.md under 'Getting an OTPAuth URL'.
Steps to reproduce:
- Setup
bna
- Run
bna show-url
- You'll notice the code is missing the colon before the question mark. This means you can't import this URL into common TOTP apps.
For example: otpauth://totp/Blizzard:SERIAL?secret=SERCRET&issuer=Blizzard&digits=8
Should be: otpauth://totp/Blizzard:SERIAL:?secret=SERCRET&issuer=Blizzard&digits=8
You can verify this:
- Install a QR code generator
pip3 install qrcode[pil]
- Run
qr "PASTEURLHERE"
- Try and scan the QR code. You'll notice you get an error.
- Repeat step 2, but add the missing colon.
- Try and scan the QR code. You'll notice it works this time.
No, it doesn't work. AndOTP still can't scan that QR code until you delete &digits=8
manually.
Deleting the &digits=8 let me scan the code but then I was unable to use it (or modify it to generate more digits)
AndOTP don't allow you to modify OTP's digits after you add it by scan the QR code. So anyway, it is definitely AndOTP's own defect. Other authentication Apps should be tested to see whether they also have the similar problem.
I tried other TOTP apps and it's in the original report (without removing &digits=8
):
- AndOTP - 'Invalid QR code'
- Authy - 'Invalid format, token format not supported'
- FreeOTP - 'The token specified was invalid'.
I've just tried a few more:
- PROTECTIMUS SMART OTP - works
- Sophos Authenticator - works
- Microsoft Authenticator - works.
So maybe the standard is unclear and some are OK with the colon and others aren't?