使用ASP.NET Core身份验证 - 当用户提供密码和用户名来获取JWT令牌时,他们将其凭据发布到/api/token
我的token控制器方法是否应该使用UserManager来使用CheckPasswordAsync检查密码,如果通过则返回token,还是应该使用SignInManager并调用PasswordSignInAsync,然后根据该结果返回token?
我看过两种方法的示例,并想知道每种方法的好处,哪种方法更好?
目前,我的团队中有人编写了以下内容:
[AllowAnonymous]
[HttpPost]
public async Task<ActionResult<User>> Post([FromBody]User model)
{
try
{
var user = await _userManager.FindByNameAsync(model.Username);
if (user == null)
return StatusCode(StatusCodes.Status401Unauthorized, "Incorrect username or password");
var passwordOK = await _userManager.CheckPasswordAsync(user, model.Password);
if (!passwordOK)
return StatusCode(StatusCodes.Status401Unauthorized, "Incorrect username or password");
model.Id = user.Id;
model.Name = user.DisplayName;
model.Password = "";
int expiresIn;
long expiresOn;
model.Token = _authorisationService.GetJWTToken(model.Username, user.Id, out expiresIn, out expiresOn);
model.ExpiresIn = expiresIn;
model.ExpiresOn = expiresOn;
return model;
}
catch (Exception)
{
// log the exception
return StatusCode(StatusCodes.Status500InternalServerError);
}
}
但我认为其中有些内容是不必要的。