ASP.NET Core 中的多重身份验证

已完成

在上一单元中,你对 ASP.NET Core Identity 进行了自定义和扩展。 在本单元中,你将了解多重身份验证以及它在标识中的实现方式。

多重身份验证

多重身份验证 (MFA) 是在登录时提示用户完成其他形式的身份识别的过程。 此提示可能是应用提供的验证码、硬件令牌值或生物识别扫描。 要求进行第二种类型的身份验证时,安全性便得到了增强。

身份验证所需的证明分为三种类型:

  • 已知内容,例如密码或安全性问题。
  • 已有内容,例如硬件令牌或手机应用。
  • 自身特征,例如指纹或面部扫描。

MFA 的有效性在很大程度上源于使用不同类型的身份验证。 对手可能能够访问多项你已知的内容(例如密码和你小时候的昵称),但要同时盗用你的已有内容和自身特征就比较困难。

基于时间的一次性密码

基于时间的一次性密码 (TOTP) 是一种常见的算法,可用于生成唯一数值代码,在 30 秒后过期。 该算法采用两个输入,即当前时间和唯一密钥。

注册时,用户会将该密钥输入到符合 TOTP 的应用。 此类应用包括:

  • Microsoft Authenticator
  • Google Authenticator
  • LastPass Authenticator

使用 QR 码可以简化将密钥输入应用的过程。 应用每 30 秒使用密钥和当前时间生成并显示唯一验证码。 如果应用生成的验证码与服务器所需的匹配,则身份验证成功。 该算法在设计上忽略设备和服务器上的时钟之间的细微差异。

它属于 MFA 的一种形式,因此系统通常会提示用户输入 TOTP 码和密码。 密码是已知内容,验证码是已有内容的证明。 这是因为生成验证码的唯一方法是将密钥存储在应用中。

默认情况下,使用标识的 ASP.NET Core 项目模板包括对 TOTP 身份验证器应用的多重身份验证支持。 Razor Pages 模板的“配置验证器应用”表单显示了一个 32 个字符的注册密钥,用于为令牌值设定种子。 但该模板默认不会生成 QR 码。

注意

短信发送的验证码是 TOTP 的常见替代方法。 毕竟,接收短信的手机是你的已有内容。 但是,相对而言,用作 MFA 的短信比较容易让对手破解。 因此,不再将短信验证码视为一种安全的 MFA。

摘要

在本单元中,你了解了什么是多重身份验证,以及它在 ASP.NET Core Identity 中的实现方式。 在下一单元中,你可以自定义现有的“配置验证器应用”表单以提供包含注册密钥的 QR 码。