密码自动更新

问题描述 投票:0回答:1

带有 .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 应用程序中使用。

c# .net asp.net-core jwt
1个回答
1
投票

@KirkLarin,非常感谢,通过在配置服务方法下的 StartUp.cs 文件中添加以下代码,它帮助我解决了问题

public void ConfigureServices(IServiceCollection services)
{
          services.Configure<PasswordHasherOptions>(options => options.CompatibilityMode = 
            PasswordHasherCompatibilityMode.IdentityV2);
}
© www.soinside.com 2019 - 2024. All rights reserved.