可能是由于身份验证失败导致的问题,需要进行以下步骤:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false; // 是否使用https
options.SaveToken = true; // 是否保存Token
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true, // 是否验证签名
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])), // 设置签名密钥
ValidateIssuer = true, // 是否验证发行人
ValidIssuer = Configuration["Jwt:Issuer"], // 设置发行人
ValidateAudience = true, // 是否验证订阅人
ValidAudience = Configuration["Jwt:Audience"], // 设置订阅人
ValidateLifetime = true, // 是否验证有效时间
ClockSkew = TimeSpan.Zero // 设置时间偏移量,为零表示不允许偏移
};
});
app.UseRouting();
app.UseAuthentication(); // 添加身份验证中间件
app.UseAuthorization(); // 添加授权中间件
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
[Authorize]
[ApiController]
[Route("api/[controller]")]
public class ValuesController : ControllerBase
{
//...
}
如果还是出现401未授权错误,可以在Startup.cs文件的Configure方法中进行以下调试:
app.Use(async (context, next) =>
{
// 在管道中添加中间件,捕获未授权的请求
await next();
if (context.Response.StatusCode == 401)
{
Console.WriteLine("未授权的请求...");
}
});
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});