Веб-API перенесен с .NET Core 2.2 на .NET 8, и вход в систему больше не работает.C#

Место общения программистов C#
Ответить
Anonymous
 Веб-API перенесен с .NET Core 2.2 на .NET 8, и вход в систему больше не работает.

Сообщение Anonymous »

Я перенес веб-API ASP.NET Core 2.2 в .NET 8.0, скопировав код в пустой проект .NET 8.0, и в основном устранил все ошибки сборки, установив необходимые зависимости и т. д. Я получил веб-API для запуск, но попытка войти в интерфейс, подключенный к веб-API, похоже, не работает. Я только что получаю сообщение об ошибке 500 ошибок ответа HTTP.
Я перевел веб-API в режим отладки в VS2022 и пошел шаг за шагом, чтобы увидеть, что происходит не так, и я обнаружил, что сначала из-за При миграции хешированные пароли устарели, поэтому вместо получения PasswordVerificationResult.Success я получал PasswordVerificationResult.SuccessRehashNeeded, и, таким образом, для возвращаемого пользователя было установлено значение null. Я пока не хотел рисковать возиться с базой данных, поэтому временно изменил проверку на PasswordVerificationResult.SuccessRehashNeeded. И логика проверки работает, и кажется, что она движется к действию входа в систему, но затем, после прохождения первоначальной проверки учетных данных, отладка, похоже, переходит к длинной последовательности непонятных для меня шагов.
Это включает в себя переход к различным файлам, таким как Task.cs, ExecutionContext.cs, AsyncTaskMethodBuilderT.cs, TaskAwaiter.cs и т. д. Все это в конечном итоге заканчивается возвратом ошибки 500. Я новичок в .NET и не создавал этот веб-API, поэтому надеюсь получить здесь помощь.
AccountController.cs:
[AllowAnonymous]
[Route("~/api/Token")]
public async Task Token([FromBody] UserModel userParam)
{
UserModel user = await _userService.AuthenticateAsync(userParam.Username, userParam.Password);

if (user == null)
{
return BadRequest(new { message = "Username or password is incorrect" });
}
else if (user.Id != 0)
{
return BadRequest(new { message = "Account is inactive or is expired" });
}
else
{
SessionHistoryModel sessionHist = new SessionHistoryModel();
sessionHist.Action = "Login";
sessionHist.HistTimeStamp = DateTime.Now;
sessionHist.UserId = _sqlProvider.GetUserId(user.Username.ToString());
sessionHist.UserName = user.Username;
sessionHist.Token = user.Token;

int sessionHistStatus = _sqlProvider.SaveConfigurationInstances(sessionHist, "SessionHist");
}

return Ok(user);
}

После завершения выполнения этой части начинается вышеупомянутая серия непонятных шагов.
AuthenthicateAsync():
public async Task AuthenticateAsync(string username, string password)
{
UserModel userModel = new UserModel();
//ApplicationUser user;

var user = await _userManager.FindByNameAsync(username);

// return null if user not found
var check = _userManager.PasswordHasher.VerifyHashedPassword(user, user.PasswordHash, password);

if (user == null || !check.Equals(PasswordVerificationResult.SuccessRehashNeeded))
{
return null;
}
else if (user.IsActive == false || user.AccountExpiryDate < DateTime.Now)
{
userModel.Id = user.Id;
return userModel;
}

// authentication successful so generate jwt token
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(_appSettings.Secret);

var claims = new List
{
new Claim(ClaimTypes.Name, user.Id.ToString())
};

// Get User roles and add them to claims
var roles = await _userManager.GetRolesAsync(user);
AddRolesToClaims(claims, roles);

var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Expires = DateTime.UtcNow.AddDays(7),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};

var token = tokenHandler.CreateToken(tokenDescriptor);

userModel.Username = username;
userModel.Token = tokenHandler.WriteToken(token);

// remove password before returning
userModel.Password = null;

return userModel;
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... nger-works
Ответить

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

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

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

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

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