ASP.NET 未授权
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 ASP.NET 8 中未授权访问的处理。对于具有身份验证的安全 Web 应用程序,未授权响应至关重要。
ASP.NET 提供了强大的身份验证和授权工具。未授权结果有助于保护资源免受未经身份验证的用户的侵害。
基本定义
ASP.NET 中的未授权状态表示请求缺少有效的身份验证凭据。它对应于 HTTP 状态码 401。
当用户尝试在没有正确凭据的情况下访问受保护的资源时,ASP.NET 可以返回未授权结果。这与禁止 (403) 不同。
未授权意味着可以进行身份验证但尚未提供。禁止意味着用户已通过身份验证但缺乏资源的权限。
ASP.NET 未授权示例
以下示例演示了 ASP.NET 8 中未授权访问的处理。
Program.cs
var builder = WebApplication.CreateBuilder(args); builder.Services.AddAuthentication("Bearer") .AddJwtBearer("Bearer", options => { options.Authority = "https://:5001"; options.TokenValidationParameters = new() { ValidateAudience = false }; }); builder.Services.AddAuthorization(); builder.Services.AddControllers(); var app = builder.Build(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();
这设置了 JWT 承载令牌身份验证。AddAuthentication
方法配置身份验证方案。UseAuthentication
和 UseAuthorization
启用了中间件。
Controllers/SecureController.cs
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/[controller]")] public class SecureController : ControllerBase { [HttpGet("public")] public IActionResult PublicEndpoint() { return Ok("This is public data"); } [Authorize] [HttpGet("protected")] public IActionResult ProtectedEndpoint() { return Ok("This is protected data"); } [Authorize(Roles = "Admin")] [HttpGet("admin")] public IActionResult AdminEndpoint() { return Ok("This is admin-only data"); } [HttpGet("custom")] public IActionResult CustomAuthCheck() { if (!User.Identity.IsAuthenticated) { return Unauthorized("Please authenticate first"); } return Ok("You are authenticated"); } }
此控制器展示了不同的授权场景。Authorize
属性保护终结点。未经身份验证的用户将收到 401 未授权响应。
第一个终结点是公开的。第二个需要任何已通过身份验证的用户。第三个需要管理员角色。第四个演示了手动授权检查。
当未经身份验证的用户访问受保护的终结点时,ASP.NET 会自动返回 401 响应。Unauthorized
方法创建此响应。
该示例展示了基于属性和手动授权的方法。User.Identity.IsAuthenticated
属性检查身份验证状态。
来源
在本文中,我们探讨了 ASP.NET 8 中未授权访问的处理。适当的身份验证和授权对于安全的 Web 应用程序至关重要。