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 至关重要。