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 应用程序至关重要。