ASP.NET核心标识GenerateTwoFactorTokenAsync返回空字符串

时间:2019-02-27 22:27:39

标签: c# asp.net-core .net-core asp.net-identity

应用程序是.NET Core 2.1。

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

以下代码是我在用户首先输入其手机号码来设置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();
  }

谢谢!

2 个答案:

答案 0 :(得分:1)

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

您可以从文档中获取详细信息, how implement 2-factor auth in ASP.NET Core using sms

答案 1 :(得分:0)

对于后来出现的任何人,我最终都弄清楚了。我只是在.NET核心库中进行搜索,发现了令牌提供者PhoneNumberTokenProvider。只是将其传递给了generate函数而不是Authentication函数,那似乎效果很好。

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