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)
提前致谢!
您可以使用await _userManager.GenerateTwoFactorTokenAsync(user, TokenOptions.DefaultPhoneProvider);
您可以从文档中获取详细信息, 如何使用短信在 ASP.NET Core 中实现 2 因素身份验证
对于后来出现的任何人,我最终都弄清楚了。我刚刚搜索了 .NET core 库并找到了令牌提供程序PhoneNumberTokenProvider。只需将其传递到生成函数而不是身份验证函数中,这似乎效果很好。
现在我只需要弄清楚是否有内置方法来保存用户设置的 tfa 类型,或者我是否需要自己管理......