如何在 identityserver4+AspNetCode.Identity 中使用电子邮件 OTP 而不是身份验证器 TOTP

How to use email OTP instead of authenticator TOTP in identityserver4+AspNetCode.Identity

我发布这个是为了让其他人遇到同样的问题,因为我找不到任何在线文档。

问题:

使用https://github.com/skoruba/IdentityServer4.Admin(IdentityServer4,使用Microsoft.AspnetCore.Identity进行身份验证),如何更改默认的身份验证器TOTP并改用基于电子邮件的OTP?

  1. 在 AccountController 中找到以下行:

    return RedirectToAction(nameof(LoginWith2fa), new { model.ReturnUrl, RememberMe = model.RememberLogin });

  2. 添加之前:

    var code = await _userManager.GenerateTwoFactorTokenAsync(user, "Email");

    _emailSender.SendEmailAsync(user.Email, "双因子代码", htmlEmail);

  3. 查找行:

    var result = await _signInManager.TwoFactorAuthenticatorSignInAsync(authenticatorCode, model.RememberMe, model.RememberMachine);

  4. 替换为:

    var result = await _signInManager.TwoFactorSignInAsync("Email", authenticatorCode, model.RememberMe, model.RememberMachine);

我希望它能为别人省去一些麻烦。