ZetCode

ASP.NET Forbid

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 Forbid 方法。此方法对于处理 Web 应用程序中的授权失败至关重要。

ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。Forbid 方法有助于以标准化方式管理访问控制。

基本定义

ASP.NET 中的 Forbid 方法返回 403 Forbidden HTTP 状态码。这表明服务器理解请求但拒绝授权。

与 Unauthorized (401) 不同,Forbid 用于用户已通过身份验证但权限不足的情况。它通常在授权中间件中使用。

Forbid 是 ASP.NET 授权系统的一部分,可与身份验证方案配合使用。如果配置得当,它可以触发身份验证挑战。

ASP.NET Forbid 示例

以下示例演示了如何在带有基于角色的授权的控制器中使用 Forbid。

Program.cs
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddAuthentication();
builder.Services.AddAuthorization();

builder.Services.AddControllers();

var app = builder.Build();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();
app.Run();

这设置了一个基本的 ASP.NET 应用程序,具有身份验证和授权。中间件的顺序对于正常功能至关重要。

Controllers/AdminController.cs
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class AdminController : ControllerBase
{
    [Authorize(Roles = "Administrator")]
    [HttpGet("settings")]
    public IActionResult GetSettings()
    {
        return Ok(new { Theme = "Dark", LogLevel = "Debug" });
    }

    [Authorize]
    [HttpGet("profile")]
    public IActionResult GetProfile()
    {
        if (!User.IsInRole("User") 
            && !User.IsInRole("Administrator"))
        {
            return Forbid();
        }

        return Ok(new { Name = "John Doe", Email = "john@example.com" });
    }

    [AllowAnonymous]
    [HttpGet("status")]
    public IActionResult GetStatus()
    {
        return Ok(new { Status = "Operational" });
    }
}

此控制器演示了三种不同的授权场景。第一个方法需要管理员角色访问。

第二个方法显示了手动角色检查和 Forbid。如果用户既没有 User 角色也没有 Administrator 角色,则返回 Forbid。

第三种方法可以通过 AllowAnonymous 公开访问。Forbid 响应将触发任何配置的身份验证方案来挑战用户。

该示例展示了如何使用 Forbid 进行细粒度的授权控制。它与 ASP.NET 内置的身份验证和授权系统配合使用。

来源

Microsoft ASP.NET 授权文档

在本文中,我们探讨了 ASP.NET 8 中的 Forbid 方法。此强大功能有助于在 Web 应用程序中实现强大的授权。

作者

我的名字是 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 ASP.NET 教程