当前位置: 首页 > news >正文

.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. 继承自 AuthorizeAttributeAuthorizeAttribute 是 ASP.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 接口,从而提高了系统的安全性。

http://www.lryc.cn/news/530082.html

相关文章:

  • 项目架构调整,切换版本并发布到中央仓库
  • 考试知识点位运算
  • matlab快速入门(2)-- 数据处理与可视化
  • Kafka中文文档
  • Python-列表
  • 51单片机开发:定时器中断
  • 【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
  • 算法【混合背包】
  • WordPress eventon-lite插件存在未授权信息泄露漏洞(CVE-2024-0235)
  • 基于微信小程序的医院预约挂号系统设计与实现(LW+源码+讲解)
  • C++初阶 -- 手撕string类(模拟实现string类)
  • 【Postman接口测试】Postman的安装和使用
  • miniconda学习笔记
  • 区块链项目孵化与包装设计:从概念到市场的全流程指南
  • JavaScript的基本组成
  • [Linux]从零开始的STM32MP157 U-Boot移植
  • 【Unity3D】实现横版2D游戏——攀爬绳索(简易版)
  • 【llm对话系统】大模型 Llama 源码分析之 LoRA 微调
  • 算法随笔_35: 每日温度
  • 嵌入式硬件篇---CPUGPUTPU
  • STM32 PWM驱动舵机
  • 设计心得——平衡和冗余
  • webrtc协议详细解释
  • 动手学强化学习(四)——蒙特卡洛方法
  • 网络原理(3)—— 传输层详解
  • 2025美赛美国大学生数学建模竞赛A题完整思路分析论文(43页)(含模型、可运行代码和运行结果)
  • Elasticsearch的开发工具(Dev Tools)
  • Python-基于PyQt5,pdf2docx,pathlib的PDF转Word工具
  • 小程序-视图与逻辑
  • UE5制作视差图