[英]ASP.NET Core Identity GenerateTwoFactorTokenAsync returning empty string
應用程序是 .NET Core 2.1。
我正在我的站點(已經有基於應用程序的 tfa)中實現 SMS 雙重身份驗證,使用 Twilio,一切就緒,但小問題是無法生成令牌。
以下代碼是我在用戶輸入他們的手機號碼以首先設置 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();
}
提前致謝!
您可以使用await _userManager.GenerateTwoFactorTokenAsync(user, TokenOptions.DefaultPhoneProvider);
您可以從文檔中獲取詳細信息, 如何使用 sms 在 ASP.NET Core 中實現 2-factor auth
對於后來出現的任何人,我最終弄清楚了。 我剛剛搜索了 .NET 核心庫並找到了令牌提供程序PhoneNumberTokenProvider
。 只是將它傳遞給 generate 函數而不是 Authentication 函數,這似乎很好用。
現在我只需要弄清楚是否有一種內置方法可以保存用戶設置的 tfa 類型,或者我是否需要自己管理...
當您嘗試獲取身份驗證器應用程序令牌時,它不起作用並返回空字符串,您應該在代碼下使用來解決您的問題
await _userManager.ResetAuthenticatorKeyAsync(user);
var token = await _userManager.GetAuthenticatorKeyAsync(user);
我使用此代碼並正常工作,您可以在此鏈接中看到身份源中的兩個因素身份驗證
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.