可能的原因是令牌不包含所需要的授权信息,或者在 API 控制器中没有正确配置身份验证和授权。首先,确认要访问的 API 是否需要身份验证和授权,然后使用适当的方法生成令牌并将其添加到请求头中。以下是一个简单的示例代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["Jwt:Issuer"],
ValidAudience = Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
};
});
services.AddAuthorization(options =>
{
options.AddPolicy("AuthorizedUsersOnly", policy => policy.RequireRole("Administrator", "Operator"));
});
services.AddControllers();
}
[Authorize(Roles = "Administrator")]
[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
// API methods
}
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
HttpResponseMessage response = await client.GetAsync("http://localhost:5000/api/users");
通过这些步骤,应该可以解决 ASP.NET Web API 授权被拒绝的问题。