ASP.NET Authorize
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 ASP.NET 8 中的 Authorize 属性。此属性对于通过控制访问来保护 Web 应用程序和 API 至关重要。
ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。Authorize 属性有助于实现身份验证和授权。
基本定义
ASP.NET 中的 Authorize 属性将控制器或操作的访问权限限制给已认证的用户。它还可以指定必需的角色或策略。
当应用于控制器或操作方法时,Authorize 会检查当前用户是否已认证。如果未认证,则返回 401 Unauthorized 状态码。
Authorize 是 ASP.NET 安全系统的一部分,它与各种身份验证方案集成。它可以与基于 Cookie 的身份验证、JWT 令牌等一起使用。
ASP.NET Authorize 示例
下面的示例演示了一个使用 Authorize 的安全 Web API 控制器。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new()
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidAudience = builder.Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
};
});
builder.Services.AddAuthorization();
builder.Services.AddControllers();
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
这会设置一个具有 JWT bearer 令牌身份验证的 ASP.NET 应用程序。Authorize 属性需要 `UseAuthentication` 和 `UseAuthorization` 中间件才能正常工作。
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
[Authorize]
public class OrdersController : ControllerBase
{
private static List<Order> _orders = new()
{
new Order(1, "Laptop", 2, 1999.98m),
new Order(2, "Monitor", 1, 299.99m)
};
[HttpGet]
public IActionResult GetAllOrders()
{
return Ok(_orders);
}
[HttpGet("{id}")]
public IActionResult GetOrderById(int id)
{
var order = _orders.FirstOrDefault(o => o.Id == id);
if (order == null) return NotFound();
return Ok(order);
}
[HttpGet("admin")]
[Authorize(Roles = "Admin")]
public IActionResult GetAdminData()
{
return Ok("This is sensitive admin data");
}
}
public record Order(int Id, string ProductName, int Quantity, decimal Total);
此控制器演示了三种不同的授权场景。控制器级别的 `[Authorize]` 要求所有操作都必须经过身份验证。
前两个方法对任何已认证的用户都可访问。第三个方法具有额外的 `[Authorize(Roles = "Admin")]` 属性,将访问权限限制给 Admin 角色的用户。
`ApiController` 属性启用了 Web API 约定。`Route` 属性为该控制器中的所有操作设置了基础路径。
此示例展示了 Authorize 如何在不同级别和不同要求下使用。它演示了简单的身份验证检查和基于角色的授权。
来源
在本文中,我们探讨了 ASP.NET 8 中的 Authorize 属性。这项强大功能对于保护 Web 应用程序和 API 至关重要。