public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = true;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration.GetSection("JwtConfig:Secret").Value)),
ValidateIssuer = true,
ValidIssuer = Configuration.GetSection("JwtConfig:Issuer").Value,
ValidateAudience = true,
ValidAudience = Configuration.GetSection("JwtConfig:Audience").Value,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
});
services.AddAuthorization(options =>
{
options.AddPolicy("Admin", policy => policy.RequireClaim("role", "admin"));
});
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
[Authorize]
[HttpGet]
public async Task Get()
{
// API 操作的代码...
}
这样,如果请求头中包含了有效的 JWT Token,授权中间件将自动将其解析并将用户标识信息加入请求上下文中,API 操作就可以正常调用。