ASP.NET Core IdentityGenerateTwoFactorTokenAsync 返回空字符串

the*_*ynt 8 c# asp.net-identity .net-core asp.net-core

应用程序是.NET Core 2.1。

我正在使用 Twilio 在我的网站中实现 SMS 双因素身份验证(已经有基于应用程序的 tfa),一切都准备就绪,但存在无法生成令牌的小问题。

当用户首先输入手机号码来设置 TFA 时,我调用以下代码。只需生成一个代码并将其发短信给他们即可。但调用_userManager.GenerateTwoFactorTokenAsync返回一个空字符串。从源代码来看,这是硬编码的。有用。

我希望使用它,这样我就可以使用与基于应用程序的 tfa 相同的验证流程。那么我应该使用什么函数来生成要发送给用户的 tfa 令牌?或者我处理这个问题的方式不正确?

编辑:根据我自己的挖掘,也许我应该使用更改电话号码令牌来进行此初始设置。但问题就变成了,登录时实际的 tfa 流程应该使用什么?

  [Authorize]
  [HttpPost("send-sms")]
  public async Task<IActionResult> SendSms(SMSModel input)
  {
     var user = await _userManager.GetUserAsync(User);

     if (String.IsNullOrWhiteSpace(_smsOptions.Sid) || String.IsNullOrWhiteSpace(_smsOptions.Token)) {
        ModelState.AddModelError("phoneNumber", "SMS provider not set up.");
        return BadRequest(ModelState);
     }

     var code = await _userManager.GenerateTwoFactorTokenAsync(user, _userManager.Options.Tokens.AuthenticatorTokenProvider);
     var message = "Your one-time verification code is: " + code;

     TwilioClient.Init(_smsOptions.Sid, _smsOptions.Token);
     try {
        var result = await MessageResource.CreateAsync(
           to: new PhoneNumber(input.phone),
           from: new PhoneNumber(_smsOptions.From),
           body: message
        );
     } catch (Exception e) {
        ModelState.AddModelError("phoneNumber", e.Message);
        return BadRequest(ModelState);
     }

     return Ok();
  }
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Mic*_*cki 5

您可以使用await _userManager.GenerateTwoFactorTokenAsync(user, TokenOptions.DefaultPhoneProvider);

您可以从文档中获取详细信息, 如何使用短信在 ASP.NET Core 中实现 2 因素身份验证


the*_*ynt 1

对于后来出现的任何人,我最终都弄清楚了。我刚刚搜索了 .NET core 库并找到了令牌提供程序PhoneNumberTokenProvider。只需将其传递到生成函数而不是身份验证函数中,这似乎效果很好。

现在我只需要弄清楚是否有内置方法来保存用户设置的 tfa 类型,或者我是否需要自己管理......

  • 您好,您可以发布一个示例来说明您如何解决这个问题吗?我不明白你对 PhoneNumberTokenProvider 做了什么 (4认同)