RBAC和CBAC

posted at 2020.10.5 00:02 by Administrator

Asp.Net Core 中,授权一般是指对信息安全或计算机安全相关的资源定义与访问权限授予,尤指访问控制。动词“授权”可指定义访问策略与接受访问。

RBAC

我们从更加宽泛的角度来理解什么是角色。在一家公司里,一个人可能具备以下角色:员工、经理、财务人员和人力资源,一个人可能同时拥有一种或两种角色。同样,在应用程序中,登录的用户可能也同时拥有一个或者多个角色,我们通过授权的方法来控制这些登录用户对某些资源的访问权限。由于通过角色的判断的形式进行授权检查,因此该授权常被称为基于角色的权限访问控制(Role-Based Access Control,RBAC)或基于角色的授权。

ASP.NET Core中,为了实现基于角色的授权,我们通过Authorize属性中的Roles参数值来进行控制授权即可。

[Authorize(Roles = “Admin”)]

Public class AdminController:Controller{  }

CBAC

基于声明的授权也被称为基于上下文的访问控制(Context-Based Access  Control CBAC)。在了解基于声明的授权之前,让我们先了解一下Identity框架中的声明(Claim)。

ASP.NET Core Identity框架中的Claim是一个类文件,它可以视为一对值,由属性ClaimType和属性ClaimValue组成,可用于控制访问。

声明授权的用户场景比较广泛,我们可以通过创建Claim属性(如用户名、邮件地址、年龄和性别等)值,然后检查业务是否满足当前的需求。

比如,读者如果正在开发一款游戏管理系统,需要做仿沉迷验证来判断当前玩家是否已满18岁,不满足不能继续玩游戏。

Claim通常是基于策略的,比如,我们开发了一款抢红包的游戏,要满足抢红包的条件,需要包含一个或多个声明。通常基于声明的授权声明一个策略,然后与Authorize属性中的Policy参数结合使用,如删除角色的声明的代码如下:

[Authorize(Policy = “DeleteRolePolicy”)]

Public async Task<IActionResult> DeleteRole(string id){  }

Startup类的CongfigureServices()方法中添加以下配置内容:

Services.AddAuthorization(option =>

{

          Options.AddPolicy(“DeleteRolePolicy”,

          Policy => policy.RequireClaim(“Delete Role”));

});

在执行验证的过程中,会判断当前用户是否拥有声明Delete Role,来确定是否给予授权。

        其实ASP.NET Core中的角色就是一种声明。我们可以验证一下这种说法,只需要在 Visual Studio 中进入调试模式,然后在即时窗口中执行以下表达式,这些角色都是ClaimTypes.Role,如图所示。

我们已经知道声明基于策略,而角色也是一种封装后的声明,因此可以将角色和策略结合在一起进行使用。 

在实际开发中,我们会根据业务授权需求,通过角色授权、声明授权或者两者相结合满足开发需求。

Tags: , , , ,

IT技术

添加评论

  Country flag

biuquote
  • 评论
  • 在线预览
Loading