带有 .net core 的 Asp.Net Web API 在 JWT 令牌生成时自动更新密码。
首先,我有一个带有 asp net 成员资格表的 MVC5 应用程序,并希望使用 .net core 创建一个 API。
并支持MVC5 Web APP和WEB API。我为
AspNetUsers
表添加了四列(ConcurrencyStamp
、LockoutEnd
、NormalizedEmail
、NormalizedUserName
)。
虽然我能够毫无问题地获取 JWT 令牌,但每次生成 JWT 令牌时它也会更新密码,这不允许用户从 MV5 Web APP 登录。
以下是 JWT 生成令牌代码:
[Route("login")] // /login
[HttpPost]
public async Task<ActionResult> Login([FromBody] LoginViewModel
model)
{
try
{
var user = await
_userManager.FindByNameAsync(model.Username);
if (user != null && await
_userManager.CheckPasswordAsync(user, model.Password))
{
var claim = new[] {
new Claim(JwtRegisteredClaimNames.Sub, user.Id)
};
var signinKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(_configuration["Jwt:SigningKey"]));
int expiryInMinutes =
Convert.ToInt32(_configuration["Jwt:ExpiryInMinutes"]);
var token = new JwtSecurityToken(
issuer: _configuration["Jwt:Site"],
claims: claim,
audience: _configuration["Jwt:Site"],
expires: DateTime.UtcNow.AddMinutes(expiryInMinutes),
signingCredentials: new SigningCredentials(signinKey,
SecurityAlgorithms.HmacSha256)
);
return Ok(
new
{
token = new
JwtSecurityTokenHandler().WriteToken(token),
expiration = token.ValidTo,
userName = user.UserName
});
}
return Unauthorized();
}
catch (Exception ex)
{
return Unauthorized();
}
}
请让我知道如何在生成 JWT 令牌时停止更新
PasswordHash
中的 SecurityStamp
和 AspNetUsers
列。
更新:
CheckPasswordAsync
(在 Web API 中使用)方法正在更新密码字段,PasswordSignInAsync
方法在 Web 应用程序中使用。
@KirkLarin,非常感谢,通过在配置服务方法下的 StartUp.cs 文件中添加以下代码,它帮助我解决了问题
public void ConfigureServices(IServiceCollection services)
{
services.Configure<PasswordHasherOptions>(options => options.CompatibilityMode =
PasswordHasherCompatibilityMode.IdentityV2);
}