阅文时长 | | 1.15分钟 | 字数统计 | | 1844.8字符 |
主要内容 | | 1、引言&背景 2、部分设计分享 3、声明与参考资料 | ||
『.Net MVC实现角色-API权限验证的一种方式』 | |||
编写人 | | SCscHero | 编写时间 | | 2022/3/27 PM9:31 |
文章类型 | | 系列 | 完成度 | | 已完成 |
座右铭 | 每一个伟大的事业,都有一个微不足道的开始。 |
一、引言&背景 完成度:100%
a) 应对问题&背景
RBAC的权限设计已经应用到越来越多的系统中,然而在一些老项目中,对各个Role可访问的API并未做相关的限制,从而引发高级别的安全漏洞。这里介绍一种简单且比较可靠的设计。
b) 应用场景
- 在RBAC的权限设计中,对应的Role进行API权限检验。
c) 分析思路
- 首先对"Role-API"的对应关系进行梳理,一般用一张关系表进行存储。存储在缓存中。(缓存写入节点、过期时间按需而论),比如:博主是在项目启动的Global.asax文件中写入缓存,设置为永不过期,理由是项目功能已基本不迭代(当然这也有很多不便之处:例如如果按博主的这种方式,如果寄托于IIS,需要Stop后Start来更新缓存)。
- 新增一个特性AjaxAuthorizeAttribute继承于身份验证AuthorizeAttribute特性,重写OnAuthorization方法;写入逻辑为:用服务器端存储的当前用户的上下文信息中的Role取其可访问的API集合,再与访问接口的URL做判断,判断此Role是否具备该接口的权限,若不具备权限则返回403.cshtml的静态页;此特性用来标记需验证的控制器或Action。
- 以上这一种方式即可简单且相对可靠的实现对RBAC权限设计中,Role-API的权限校验。