确认JWT Token是否正确生成并在HTTP请求的头部中正确传递。
检查登录控制器中的代码是否正确处理了用户认证。以下是示例代码:
[HttpPost]
[Route("login")]
public async Task Login([FromBody] LoginViewModel model)
{
if (!ModelState.IsValid)
{
return BadRequest();
}
var user = await _userManager.FindByEmailAsync(model.Email);
if (user == null)
{
return BadRequest();
}
if (!await _userManager.CheckPasswordAsync(user, model.Password))
{
return BadRequest();
}
var tokenString = GenerateJWTToken(user);
return Ok(new { token = tokenString });
}
private string GenerateJWTToken(ApplicationUser user)
{
var claims = new List
{
new Claim(JwtRegisteredClaimNames.Sub, user.UserName),
new Claim(JwtRegisteredClaimNames.Email, user.Email),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
_configuration["Jwt:Issuer"],
_configuration["Jwt:Issuer"],
claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: creds);
return new JwtSecurityTokenHandler().WriteToken(token);
}
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])),
ValidateIssuer = true,
ValidIssuer = Configuration["Jwt:Issuer"],
ValidateAud