项目

双因素认证

使用本模块及其功能需要拥有ABP团队版或更高级许可

双因素认证(2FA)是多因素认证(MFA)的一种特定类型,要求认证方提供两个独立的身份验证因素来验证身份。第一个因素是您知道的"用户名和密码",第二个因素是您拥有的"移动设备或电子邮箱"用于验证认证请求。2FA可防范网络钓鱼、社会工程学和密码暴力攻击,确保您的登录过程免受利用弱凭证或被盗凭证的攻击者侵害。

ABP在三个不同层级处理双因素认证

  • 主机管理员端
  • 租户管理员端
  • 用户

双因素认证设置

主机端

拥有必要权限的主机用户可以设置双因素认证为强制禁用可选,适用于所有用户和租户。

  • 强制:用户登录时必须执行双因素认证。终端用户无法禁用双因素认证。同时,所有用户都被强制要求使用2FA登录。管理员用户无法设置针对特定用户的双因素认证。此设置仅可由主机用户配置,租户管理员可为其用户设置双因素认证。
  • 禁用:这种情况下,用户将无法执行双因素认证。因此,终端用户无法自行启用双因素认证。同时,管理员用户无法设置针对特定用户的双因素认证。此设置仅可由主机用户配置,租户管理员可为其用户设置双因素认证。
  • 可选:这种情况下,2FA由用户自行决定。用户可以选择为自己启用2FA。此设置仅可由主机用户配置,租户管理员可为其用户设置双因素认证。

您可以通过账户部分的https://hostname/SettingManagement页面更改主机所有用户的2FA行为:

设置管理-2FA启用

如果我们将双因素认证行为设置为强制禁用,此功能将在显示2FA设置的所有位置对用户隐藏。例如,当此功能设置为禁用时,我们将无法在https://hostname/Identity/Users页面上按用户设置2FA。

当我们将双因素认证行为设置为可选时,会看到如下图所示的两个额外选项。

设置管理

  • 允许用户更改其双因素认证:如果未选择此选项,用户将无法更改其账户的双因素认证行为。但拥有必要权限的主机用户可以按用户更改双因素认证行为。

  • 记住浏览器:选择后,用户在验证过程中将获得"记住此浏览器"复选框选项。一旦用户在浏览器/设备上使用2FA登录,网站在特定时间段内不会要求该浏览器提供验证码,因此只需用户名和密码凭证即可登录。

此外,我们还可以通过菜单转到SaaS > 租户页面(https://hostname/Saas/Host/Tenants)并点击管理主机功能按钮来更改整个主机的双因素认证行为。

管理主机功能

主机端的所有2FA设置将仅应用于主机用户。如果我们想更改特定租户的2FA设置,可以从SaaS > 租户https://hostname/Saas/Host/Tenants页面完成。点击租户的操作按钮并查看功能

租户功能

在功能模态框中,您可以更改所选租户的2FA行为。

租户功能模态框

租户管理员端

如果主机管理员将2FA设置为可选,租户可以选择是否使用2FA。 租户管理员可以强制其用户使用2FA,或为其用户禁用此设置,或通过保留为可选让用户自行设置。

租户管理员可以通过https://hostname/SettingManagement页面的账户选项卡更改影响所有租户用户的双因素认证行为。此外,租户管理员可以从https://hostname/Identity/Users页面更改特定用户的此行为。

租户用户页面

租户用户页面-2FA

用户端

如果租户/主机管理员用户将2FA设置为可选,所有主机/租户用户可以从https://hostname/Account/Manage页面更改其账户的2FA行为。还有另一个影响此行为的设置:双因素启用选项。必须选中此选项才能允许用户更改其2FA设置。否则,用户将无法更改2FA设置。

账户管理-2FA

验证提供程序

系统默认提供3种2FA验证提供程序:

  • 验证器TOTP(基于时间的一次性密码算法):此方法可与任何兼容的验证器应用程序一起使用,包括:

    请参考account/manage页面中的步骤启用它。

  • 邮箱验证:如果用户拥有已验证的邮箱地址,则此选项可用。由于在DEBUG模式下禁用了邮件发送,您可以在日志中查看安全码。在RELEASE模式下,如果已配置邮件设置,将发送真实邮件。请注意,如果用户没有已验证的邮箱地址,则不会发送验证邮件! 此设置存储在用户实体的EmailConfirmed字段中。如果选择的提供程序是Email,将执行以下代码:

    await EmailSender.SendAsync(await UserManager.GetEmailAsync(user), L["EmailSecurityCodeSubject"], message);
    
  • 短信验证:如果用户拥有已确认的电话号码,则此选项可用。此设置存储在用户实体的PhoneNumberConfirmed字段中。您需要添加短信供应商才能发送短信。ABP提供了Twilio短信模块。如果您从Twilio购买订阅并添加Twilio短信模块,您将能够发送短信验证码。另一方面,您也可以通过实现ISmsSender接口添加自己的短信提供程序。如果您处于DEBUG模式,不会发送短信,您可以在日志中查看短信验证码。如果选择的提供程序是SMS,将执行以下代码:

    await SmsSender.SendAsync(await UserManager.GetPhoneNumberAsync(user), message);
    

为什么即使用户启用了2FA也收不到验证码?

尽管2FA设置已启用,用户可能无法使用2FA。这是因为用户没有已验证的邮箱或电话号码。出于安全考虑,验证码无法发送到未验证的地址。请确保邮箱或电话号码旁边显示已验证标签,以确保相应用户可以接收验证码。

个人信息

从终端用户角度看2FA

双因素认证设置已启用且邮箱/电话号码已验证的用户可以接收验证码。输入正确的用户名和密码组合后,用户将被提示从下拉列表中选择认证提供程序:

2FA提供程序

如果用户的邮箱和电话号码都已验证,此屏幕上将显示两个验证提供程序选项。如果2FA设置已启用,但没有已验证的邮箱地址电话号码,用户将直接登录而无需2FA检查。

然后通过所选提供程序发送验证码,用户在以下页面输入验证码:

2FA验证码

记住此浏览器选项仅在管理员启用时显示。点击记住此浏览器复选框将使您在使用同一设备和浏览器登录时免于使用2FA。启用2FA并点击记住此浏览器将为您提供强大的2FA保护,防止恶意用户访问您的账户,只要他们无法访问您的设备。您可以在任何经常使用的私人设备上执行此操作。通过设置记住此浏览器,您可以在不经常使用的设备上获得额外的2FA安全性,并在自己的设备上获得无需经过2FA的便利。用户输入正确的安全码后,将能够成功登录应用程序。

点击记住此浏览器复选框后,将向客户端发送名为Identity.TwoFactorRememberMe的cookie,默认超时时间为14天。您可以按如下方式覆盖这些值:

Configure<CookieAuthenticationOptions>(IdentityConstants.TwoFactorRememberMeScheme, options =>
{
     options.ExpireTimeSpan = TimeSpan.FromDays(30); //覆盖超时时间
     options.Cookie.Name = "MyRememberMeCookieName"; //覆盖cookie名称
});
在本文档中