应用程序是.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();
}
谢谢!
答案 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类型,或者是否需要自己管理...