ASP.NET Core Identity GenerateTwoFactorTokenAsync возвращает пустую строку - PullRequest
0 голосов
/ 28 февраля 2019

Приложение - это .NET Core 2.1.

Я внедряю двухфакторную аутентификацию SMS на своем сайте (уже есть tfa на основе приложений), использую 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();
  }

Заранее спасибо!

1 Ответ

0 голосов
/ 28 февраля 2019

Для тех, кто придет позже, я все понял.Я только что искал в базовой библиотеке .NET и нашел поставщика токенов PhoneNumberTokenProvider.Просто передал это в функцию генерации вместо функции аутентификации, и это, кажется, работает отлично.

Теперь мне просто нужно выяснить, есть ли встроенный способ сохранить, какой тип tfa пользовательнастроить, или, если мне нужно управлять этим сам ...

...