我正在使用这个库进行 2 因素身份验证:https ://github.com/speakeasyjs/speakeasy
我正在使用这个二维码库:https ://www.npmjs.com/package/qrcode
在开发模式下,我使用测试用户为数据库播种。但是我在一个团队中,现在 2FA 已经实现,人们需要传入 2FA 令牌才能使用该用户登录。有没有办法为这个测试用户生成一个二维码,团队中的每个人都可以重复使用?这样,他们只需将其扫描到手机中并使用令牌。
我尝试了一种天真的方式:我生成了一个二维码,将其保存为图像,并将其放入 README 中。它对我来说很好,但是当其他人尝试扫描它时,它会在 google auth 中显示“无效条形码”。令人困惑的是我可以从谷歌身份验证中删除它并再次扫描它而不会出现问题,即使没有其他人可以。我认为这意味着 QR 码只能由一台设备使用?
如果您处于开发模式,我只能说您不必使用 2FA,但我真的不喜欢这条路线:这是一个等待发生的安全漏洞。有人可能会意外以开发模式启动 prod。
这是我的代码:
generateQRFromSecret({
secret: 'secret',
label: 'label',
issuer: 'issuer',
});
const generateQRFromSecret = ({ secret, label, issuer }) =>
new Promise((resolve, reject) => {
const otpAuthUrl = speakeasy.otpauthURL({
secret,
label,
issuer,
encoding: 'base32',
});
QRCode.toDataURL(otpAuthUrl, (err, dataUrl) => {
if (err) {
reject(err);
} else {
resolve(dataUrl);
}
});
});
更新:Android 手机似乎能够很好地读取 QR 码。是iphone不能。