要在ASP.NET Core 7 Web API中验证令牌并正确地响应状态401,您可以使用JWT(JSON Web Tokens)来进行身份验证。下面是一个解决方法的代码示例:
首先,您需要在Startup.cs文件的ConfigureServices方法中配置身份验证和JWT:
public void ConfigureServices(IServiceCollection services)
{
// 配置身份验证服务
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "your-issuer",
ValidAudience = "your-audience",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key"))
};
});
// 其他服务配置...
}
然后,在您的控制器方法中使用[Authorize]属性来强制进行身份验证:
[ApiController]
[Route("api/[controller]")]
public class YourController : ControllerBase
{
[HttpGet]
[Authorize]
public IActionResult Get()
{
// 在此处处理需要身份验证的逻辑
return Ok("验证成功!");
}
}
请确保在请求头中包含正确的令牌信息,例如在Authorization标头中使用Bearer方案:
GET /api/yourcontroller HTTP/1.1
Host: localhost:5000
Authorization: Bearer your-token
如果令牌验证失败,将会返回状态码401 Unauthorized。如果验证成功,将会返回状态码200 OK,并执行您的逻辑。
请注意,上述示例中的"your-issuer"、"your-audience"和"your-secret-key"应替换为实际的值,以便与您的身份验证设置匹配。