【问题标题】:Should the "Google Two Factor Authenticator" accountSecretKey be stored into my database?是否应该将“Google 两因素身份验证器”accountSecretKey 存储到我的数据库中?
【发布时间】:2021-05-25 01:51:35
【问题描述】:

我正在尝试了解 Google Two Factor Authenticator 流程的工作原理,以便将其整合到我的网站中。我的理解是这个过程有两个不同的部分

  1. 我网站上的用户启用了 2FA,这在我的用户和应用程序之间创建了一个链接。这是一次性步骤,并非每次登录尝试都会发生。
  2. 用户每次登录时,都需要提供来自 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 在每次登录尝试时我都必须重新创建?如果这段代码我要存储到我的数据库中,它是否也应该像密码一样加密?

【问题讨论】:

    标签: c# two-factor-authentication google-authenticator authenticator google-2fa


    【解决方案1】:

    当我设置它时,我倾向于:

    在数据库中有一个 G2FAEnabled 列,一个用于用户的 SecretKey

    生成一个唯一的密钥并使用它为用户正在使用设置G2FA的页面生成条形码,记住它在服务器端(放在数据库中)但不要设置启用列

    在用户将您的网站添加到身份验证器后,请他们扫描或输入设备显示的代码。这证明他们的设备设置正确,设备时钟正确等

    如果他们键入的数字是正确的,请将启用的列设置为 true 并锁定内容,以便密钥现在不可更改(更改它会杀死他们的 2FA)

    从那时起,用户必须为当前服务器时间和存储在服务器上的密钥提供正确的基于时间的 pin。他们的设备时钟必须与服务器保持同步。您可以通过检查例如 6 次当前时间的任一侧尝试找到匹配项来实现时钟漂移容差(这意味着设备时钟相对于服务器时间可以是正负 3 分钟并且仍然匹配)。

    任何停用 2FA(将启用的列设置为 false)的尝试也应该需要有效的 2FA 代码,但是您的客户服务部门的替代流程(例如查看用户的护照)应该允许在不知情的情况下重置

    您不必加密数据库中的密钥 - 您必须对其进行解密才能使用它,这不像存储明文密码之类的失礼行为(如果您的数据库被盗,这是一个问题,因为用户一直重复使用密码,因此您的数据库被盗可能意味着您泄露了用户所有其他服务的密码),因为它应该是随机数据,对您的组织之外没有任何意义,因此它不会帮助黑客破解进入另一个使用相同 2FA 设备的用户网站。

    通常,如果有人能够窃取您的数据库,他们已经达到了可以窃取必要位以解密您存储的任何加密内容的程度,但如果您确定您的数据库可能被盗,但您的网络服务器将保持安全,然后通过各种方式加密数据库数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 2016-06-06
      • 2016-02-21
      相关资源
      最近更新 更多