我正在尝试了解Google Two Factor Authenticator流程是如何工作的,以便将其合并到我的网站中。我的理解是这个过程有两个不同的部分
- 我网站上的一个用户启用了 2FA,它在我的用户和应用程序之间创建了一个链接。这是一次性步骤,不会在每次登录尝试时发生。
- 每次用户登录时,他都需要提供来自 Google Authenticator 应用程序的六位数代码。
现在,以下代码生成 QR 图像和设置代码以启用 2FA 并将帐户链接到 Google Authenticate。
TwoFactorAuthenticator tfa = new TwoFactorAuthenticator();
string accountSecretKey = Guid.NewGuid();
var setupInfo = tfa.GenerateSetupCode("Dotnet Awesome", login.Username, accountSecretKey, 300, 300);
ViewBag.BarcodeImageUrl = setupInfo.QrCodeSetupImageUrl;
ViewBag.SetupCode = setupInfo.ManualEntryKey;
现在,对于每个请求,我都会使用以下代码对用户进行身份验证
TwoFactorAuthenticator tfa = new TwoFactorAuthenticator();
tfa.ValidateTwoFactorPIN(accountSecretKey, "Six Digit Code");
问题
在上面的代码中,accountSecretKey
我必须将代码保存到我的数据库中,以便每次我想验证时都可以传递它吗?或者,accountSecretKey
我在每次登录尝试时都必须重新创建的东西?如果此代码我将存储到我的数据库中,它是否也应该像密码一样加密?