我正在try 使用Program.cs文件中的以下代码在ASP.NET API中生成JWT令牌:
var key = Encoding.ASCII.GetBytes(Settings.Secret);
builder.Services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
x.RequireHttpsMetadata = false;
x.SaveToken = true;
x.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(key),
ValidateIssuer = false,
ValidateAudience = false
};
});
app.UseAuthorization();
app.UseAuthentication();
然后,我使用以下代码来生成令牌:
namespace DeliveryAPI.Services
{
public class TokenService
{
public static string GenerateToken(EstablishmentLoginDTO request)
{
if (request == null)
{
throw new ArgumentNullException(nameof(request));
}
var key = Encoding.ASCII.GetBytes(Settings.Secret);
var tokenConfig = new SecurityTokenDescriptor
{
Subject = new System.Security.Claims.ClaimsIdentity(new Claim[]
{
new Claim("email", request.Email.ToString())
}),
Expires = DateTime.UtcNow.AddHours(2),
SigningCredentials = new SigningCredentials(
new SymmetricSecurityKey(key), Security算法rithms.HmacSha256)
};
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateToken(tokenConfig);
var tokenString = tokenHandler.WriteToken(token);
return tokenString;
}
}
}
然后,我在我的请求的"Authorization"头中使用生成的令牌,但我总是得到一个"401 Underated"错误.我使用的是ASP.NET7.
在前端,我在请求头中使用令牌,如下所示:
"Authorization": `Bearer ${token}`
使用我的JWT令牌的postman 也有同样的问题.
导致此错误的原因可能是什么,以及如何排除它的故障?