Microsoft.AspNetCore.Identity.UserManager может генерировать двухфакторный токен, но SignInManager не может оценить успеC#

Место общения программистов C#
Ответить
Anonymous
 Microsoft.AspNetCore.Identity.UserManager может генерировать двухфакторный токен, но SignInManager не может оценить успе

Сообщение Anonymous »


У меня есть веб-API ASP.NET, который обеспечивает вход с двухфакторной аутентификацией. Процесс выглядит следующим образом: вызывает функцию входа в систему, которая оценивает имя пользователя и пароль, а затем возвращается с предупреждением об электронном письме с кодом токена, отправленном на электронную почту пользователя. Если я тестирую токен с копированием в текстовое поле через Swagger на том же порту с сервером .net, процесс идет очень хорошо, но если я тестирую его через angular, который работает на другом порту, SignInResult.Succeeded будет неудачным. Порт сервера: 44334. Клиентский порт: 4200 Это проблема с настройкой промежуточного программного обеспечения в веб-API .NET? Итак, 2 действия: оценка параметров входа и отправка кода токена на адрес электронной почты, а также двухфакторная оценка токена:

// POST: api/Account/login [HttpPost] [Маршрут("логин")] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status200OK)] общедоступная асинхронная задача Login ([FromBody] LoginDto loginDto) { string message = $"Попытка входа в систему для {loginDto.Username}"; _logger.LogInformation(сообщение); если (!ModelState.IsValid) { вернуть BadRequest (ModelState); } пытаться { Пользователь ApiUser = ждут _authenticationManagerService.ValidateUser(loginDto); если (пользователь != ноль) { если (user.TwoFactorEnabled) { вар токен = ждут _userManager.GenerateTwoFactorTokenAsync(пользователь, TokenOptions.DefaultEmailProvider); await _emailManagerService.SendEmailAsync(user.Email!, string.Format("{0} {1}", user.LastName, user.FirstName), token); вернуть StatusCode(StatusCodes.Status200OK, новый TokenRequest {Is2FA = true}); } } еще { вернуть BadRequest(); } вар tokenRequest = новый TokenRequest {Токен = ждут _authenticationManagerService.CreateToken (), RefreshToken = ждут _authenticationManagerService.CreateRefreshToken (), Пользователь = пользователь}; возврат Принято (tokenRequest); } поймать (UnauthorizedException) { вернуть Неавторизованный(); } поймать (исключение) { бросать; } } [HttpPost] [Маршрут("verifytwofactor")] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status202Accepted)] public async Task VerifyTwoFactor([FromBody] TwoFactorDto twoFactorDto) { var SignIn = ждут _signInManager.TwoFactorSignInAsync(TokenOptions.DefaultEmailProvider, twoFactorDto.Code.ToString(), twoFactorDto.IsPersistent, false); // ошибка здесь, когда я пытаюсь выполнить оценку через Angular if (signIn.Succeeded) // Возвращает false { вар пользователь = ждут _authenticationManagerService.ValidateUserAfter2FA (twoFactorDto.Username); return Accepted(new TokenRequest {Token = await _authenticationManagerService.CreateToken(), RefreshToken = await _authenticationManagerService.CreateRefreshToken(), User = user }); } еще { вернуть BadRequest(); } } И мое промежуточное программное обеспечение:

services.AddAuthentication(o => { o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddCookie(IdentityConstants.TwoFactorUserIdScheme, o => { o.Cookie.Name = IdentityConstants.TwoFactorUserIdScheme; o.ExpireTimeSpan = TimeSpan.FromMinutes(10); }); Итак, вопрос: как исправить эту часть, чтобы правильно работала аутентификация по токену через Angular?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»