.Net Web API 访问权限限定

看到一个代码是这样的:

c# webapi 上

Route("api/admin/file-service"), AuthorizeAdmin

AuthorizeAdmin 的定义是这样的

复制代码
public class AuthorizeAdminAttribute : AuthorizeAttribute
{
    public AuthorizeAdminAttribute()
    {
        Roles = "admin";
    }
}

这个AuthorizeAdmin 有什么用?

AuthorizeAdminAttribute 是一个自定义的授权属性,继承自 AuthorizeAttribute,其目的是对控制器或动作方法进行访问控制,确保只有角色为 "admin" 的用户能够访问该方法或控制器。

解析 AuthorizeAdminAttribute 的工作原理

  1. 继承自 AuthorizeAttributeAuthorizeAttributeASP.NET Core 中的一个内置特性,它用于指定访问某个控制器或方法的权限要求。当你使用 Authorize 特性时,系统会检查当前请求的用户是否已经通过身份验证,并且是否符合指定的授权要求(例如角色、权限等)。

  2. Roles = "admin" : 在 AuthorizeAdminAttribute 构造函数中,设置了 Roles = "admin"。这意味着,只有角色为 "admin" 的用户才能访问使用该特性标记的控制器或方法。换句话说,只有角色为 "admin" 的用户,系统才会允许其访问这部分代码。如果用户的角色不是 "admin",他们将无法访问这个 API,通常会返回 HTTP 403 (Forbidden) 错误。

  3. 自定义授权特性AuthorizeAdminAttribute 是一个自定义特性,实际上它是通过继承 AuthorizeAttribute 来实现的。在使用时,它可以像其他特性一样直接应用到控制器或方法上。

示例

假设有一个 API 控制器,只有管理员可以访问某些操作:

复制代码
[Route("api/admin/file-service")]
[AuthorizeAdmin]  // 只有角色为 admin 的用户可以访问
public class FileServiceController : ControllerBase
{
    [HttpGet]
    public IActionResult GetFiles()
    {
        // 逻辑:返回文件列表
        return Ok(new { files = "file1.txt", "file2.txt" });
    }
    
    [HttpPost]
    public IActionResult UploadFile(IFormFile file)
    {
        // 逻辑:上传文件
        return Ok(new { message = "File uploaded successfully!" });
    }
}

细节

  • 身份验证 :为了使用 AuthorizeAdminAttribute,用户必须先通过身份验证(比如使用 JWT Token 或 Cookie 认证)。如果用户未认证,系统会拒绝访问,返回一个 401(Unauthorized)状态码。
  • 角色验证 :在认证通过的基础上,AuthorizeAdminAttribute 还会验证用户的角色,确保用户具有 "admin" 角色。角色通常是通过认证时返回的 JWT token 或服务器的身份验证系统来附带的。

总结

AuthorizeAdminAttribute 的作用是:

  • 限制访问该控制器或方法的用户必须具备 admin 角色。
  • 它是基于 ASP.NET Core 的 AuthorizeAttribute 特性自定义的。
  • 它确保了只有管理员角色的用户才能访问标记为 [AuthorizeAdmin] 的 API 接口,从而提高了系统的安全性。
相关推荐
寻星探路3 分钟前
【Python 全栈测开之路】Python 进阶:库的使用与第三方生态(标准库+Pip+实战)
java·开发语言·c++·python·ai·c#·pip
SmartRadio8 小时前
CH585M+MK8000、DW1000 (UWB)+W25Q16的低功耗室内定位设计
c语言·开发语言·uwb
kylezhao20198 小时前
C#winform数据绑定
c#
rfidunion8 小时前
QT5.7.0编译移植
开发语言·qt
rit84324998 小时前
MATLAB对组合巴克码抗干扰仿真的实现方案
开发语言·matlab
大、男人9 小时前
python之asynccontextmanager学习
开发语言·python·学习
hqwest9 小时前
码上通QT实战08--导航按钮切换界面
开发语言·qt·slot·信号与槽·connect·signals·emit
AC赳赳老秦9 小时前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek
不知道累,只知道类10 小时前
深入理解 Java 虚拟线程 (Project Loom)
java·开发语言
国强_dev10 小时前
Python 的“非直接原因”报错
开发语言·python