ZetCode

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 方法配置身份验证方案。UseAuthenticationUseAuthorization 启用了中间件。

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 属性检查身份验证状态。

来源

Microsoft ASP.NET 授权文档

在本文中,我们探讨了 ASP.NET 8 中未授权访问的处理。适当的身份验证和授权对于安全的 Web 应用程序至关重要。

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出所有 ASP.NET 教程