Authing Share丨如何对用户进行权限管理

当你已经构建起用户系统,在某个时刻你的 API 就需要判断当前访问的用户是否能够访问当前资源了。这时候你就需要构建自己的权限系统。权限系统中一个很重要的概念是授权,授权指的是判断用户具备哪些权限的过程,与认证是两个完全不同的含义。

目前被大家广泛采用的两种权限模型为:基于角色的访问控制(RBAC)和基于属性的访问控制(ABAC),二者各有优劣:RBAC 模型构建起来更加简单,缺点在于无法做到对资源细粒度地授权(都是授权某一类资源而不是授权某一个具体的资源);ABAC 模型构建相对比较复杂,学习成本比较高,优点在于细粒度和根据上下文动态执行。

在 Authing 的权限系统中,我们通过用户、角色这两种对象实现了 RBAC 模型的角色权限继承,在此之上,我们还能围绕属性进行动态地、细粒度地授权,从而实现了 ABAC 权限模型。同时,我们为了满足大型系统中复杂组织架构的设计需求,将资源、角色、权限授权统一组合到一个权限分组中:

在这里插入图片描述

你可以基于 Authing 强大而又灵活的权限系统快速构建出适合你业务场景的权限模型。下面我们以现实中一个简单的场景为例。

权限模型介绍

什么是基于角色的访问控制(RBAC)

基于角色的访问控制(Role-based access control,简称 RBAC),指的是通过用户的角色(Role)授权其相关权限,简单来说,这相比直接授予用户权限,要更加灵活、高效、可扩展。

在这里插入图片描述

当使用 RBAC 时,通过分析系统用户的实际情况,基于共同的职责和需求,授予他们不同角色。你可以授予给用户一个或多个角色,每个角色具有一个或多个权限,这种 用户-角色、角色-权限 间的关系,让我们可以不用再单独管理单个用户,用户从授予的角色里面继承所需的权限。

以一个简单的场景(Gitlab 的权限系统)为例,用户系统中有 Admin、Maintainer、Operator 三种角色,这三种角色分别具备不同的权限,比如只有 Admin 具备创建代码仓库、删除代码仓库的权限,其他的角色都不具备。
在这里插入图片描述

我们授予某个用户「Admin」这个角色,他就具备了「创建代码仓库」和「删除代码仓库」这两个权限。

不直接给用户授权策略,是为了之后的扩展性考虑。比如存在多个用户拥有相同的权限,在分配的时候就要分别为这几个用户指定相同的权限,修改时也要为这几个用户的权限进行一一修改。有了角色后,我们只需要为该角色制定好权限后,给不同的用户分配不同的角色,后续只需要修改角色的权限,就能自动修改角色内所有用户的权限。

什么是基于属性的访问控制(ABAC)

基于属性的访问控制(Attribute-Based Access Control,简称 ABAC)是一种灵活的授权模型,通过一个或一组属性来控制是否有对操作对象的权限。ABAC 属性通常来说分为四类:用户属性(如用户年龄),环境属性(如当前时间),操作属性(如读取)和对象属性(如一篇文章,又称资源属性),所以理论上能够实现非常灵活的权限控制:

在这里插入图片描述

在 ABAC 权限模型下,你可以轻松地实现以下权限控制逻辑:

  1. 授权编辑 A 具体某本书的编辑权限;
  2. 当一个文档的所属部门跟用户的部门相同时,用户可以访问这个文档;
  3. 当用户是一个文档的额拥有者并且文档的状态是草稿,用户可以编辑这个文档;
  4. 早上九点前禁止 A 部门的人访问 B 系统;
  5. 在除了上海以外的地方禁止以管理员身份访问 A 系统;

上述的逻辑中有几个共同点:

  1. 具体到某一个而不是某一类资源;
  2. 具体到某一个操作;
  3. 能通过请求的上下文(如时间、地理位置、资源 Tag)动态执行策略;

如果浓缩到一句话,你可以细粒度地授权在何种情况下对某个资源具备某个特定的权限。

授权模式介绍

Authing 支持两种授权模式:

  1. 通过基于 OAuth 2.0 流程中的授权码模式。①
  2. 通过权限 API 对用户进行授权管理。

借助 Authing 实现权限模型

下面我们以调用权限 API 的模式为例。

创建角色

你可以使用 Authing 控制台创建角色:在权限管理 - 角色管理中,点击添加角色按钮:

  • 角色 code: 该角色的唯一标志符,只允许包含英文字母、数字、下划线 _、横线 -,这里我们填 admin。
  • 角色描述:该角色的描述信息,这里我们填管理员。

创建好三个角色:
在这里插入图片描述

你也可以使用 API & SDK 创建角色,详情请见角色 Management SDK。②

授权用户角色

在角色详情页面,你可以将此角色授权给用户。你可以通过用户名、手机号、邮箱、昵称搜索用户:

在这里插入图片描述

选择用户之后点击确认,你可以查看被授权此角色的用户列表。

你也可以使用 API & SDK 给用户授予角色,详情请见角色 Management SDK。②

在后端通过用户角色控制权限

当用户成功认证、获取到 Token 之后,你可以解析到当前用户的 ID,接下来你可以使用我们提供的 API & SDK 在后端获取该用户被授予的角色,这里以 Node.js 为例:

首先获取用户的被授予的所有角色列表:

import { ManagementClient } from 'authing-js-sdk'

const managementClient = new ManagementClient({
  userPoolId: 'YOUR_USERPOOL_ID',
  secret: 'YOUR_USERPOOL_SECRET',
})
const { totalCount, list } = await managementClient.users.listRoles('USER_ID')

(代码可向右滑动)

得到用户的所有角色之后,我们可以判断该用户是否具备 devops 这个角色:

if (!list.map((role) => role.code).includes('devops')) {
  throw new Error('无权限操作!')
}

创建资源

上一步我们通过用户是否具备某个角色来控制权限,这种权限控制还是比较粗粒度的,因为只判断了用户是否具备某个角色,而没有判断其是否具备某个特定的权限。Authing 在基于角色的访问控制模型(RBAC)的基础上,还能够围绕资源进行更细粒度的授权。

你可以把系统的一些对象抽象为资源,在这些资源上可以定义了一些操作。比如在本文的场景中,Repository、Tag、PR、Release Notes 都是资源,且这些资源都有对应的操作:

  • Repository:创建、删除等。
  • PR:开启、评论、合并等。
  • Tag:创建、删除等。
  • Release Notes:创建、阅读、编辑、删除等。

我们在 Authing 中创建这些资源:
在这里插入图片描述

授权角色操作资源的权限

而且 Authing 还同时支持给用户、角色授权,如果用户在某个角色中,他也将继承这个角色被授权的权限。所以 Authing 既能够实现标准的 RBAC 权限模型,也能在这基础上进行更细粒度、更动态的权限控制。比如下面这个例子中,我们给 admin 这个角色授权了 repository 资源的 Create 和 Delete 权限:

在这里插入图片描述

在后端判断用户是否具备权限

在上一步我们通过资源授权,做到了授权给某个用户(角色)对某个特定资源的特定操作权限,我们在后端进行接口鉴权的时候,就可以做更细粒度的判断了:

首先初始化 Management SDK:

这里已 Node SDK 为例,我们同时还支持 Python、Java、C#、PHP 等语言的 SDK,详情请点击此。③

import { ManagementClient } from 'authing-js-sdk'

const managementClient = new ManagementClient({
  userPoolId: 'YOUR_USERPOOL_ID',
  secret: 'YOUR_USERPOOL_SECRET',
})

调用 managementClient.acl.isAllowed 方法,参数分别为:

  • userId: 用户 ID,用户可以被直接授权特定资源的操作,也可以继承角色被授权的权限。 resource: 资源标志符,如
  • repository:123 表示 ID 为 123 的代码仓库,r repository:* 表示代码仓库这一类资源。
  • action: 特定操作,如 repository:Delete 表示删除代码仓库这个操作。 options: 其他选项,可选
    • options.namespace,资源所属权限分组 code
const { totalCount, list } = await managementClient.acl.isAllowed(
  'USER_ID',
  'repository:123',
  'repository:Delete'
)

Authing 策略引擎会根据你配置的权限策略,动态执行策略,最后返回 true 或者 false ,你只需要根据返回值就能判断用户是否具备操作权限。

总结

本文从最简单的 RBAC 权限模型开始,再在此之上实现了如何进行更细粒度、动态的 ABAC 权限模型,且整个过程是渐进地,你可以随着业务的复杂性不断变大,逐步地迁移到 ABAC 权限模型。

跳转链接:
1.https://docs.authing.cn/v2/concepts/oidc/choose-flow#%E6%8E%88%E6%9D%83%E7%A0%81%E6%A8%A1%E5%BC%8F
2.https://docs.authing.cn/v2/reference/sdk-for-node/management/RolesManagementClient.html
3.https://docs.authing.cn/v2/reference/


如果你喜欢我们的内容,欢迎关注公众号「Authing 身份云」和访问我们的博客 Authing 博客,更多有趣的内容等你来看~

相关推荐

洞察|以 AI Agent 身份为中心的下一代 IDaaS 探索,「零信任」原则是否依然有效

若一个 AI 代理被诱骗点击了恶意链接,也应当因其权限受限而无法进一步获取更多内部信息,从而将影响降到最低。

Authing的博客 1139

Authing 正在寻找云原生应用 / Infra 开发者

我们需要云原生应用开发者和云原生基础设施开发者加入我们

Authing的博客 1121

从数据孤岛到信息共享,应用集成网关打造业务新生态

企业通过应用集成网关轻松打通业务隔阂,让应用相互“对话”,快速实现数字化转型和业务发展的持续增长。

Authing的博客 1141

建立统一网络身份认证平台,赋能用户信息安全

随着网络化、数字化、智能化的演进,在深入推进数字经济创新发展、积极培育新兴产业和未来产业的过程中,安全与发展将是永恒的主题,如何确保网络身份安全将是主旋律。

Authing的博客 1524

Authing 2024 年全员大会:坚持原创性、冒险精神和极客精神,突破瓶颈,引领市场

他的话语不仅回顾了过去一年的挑战,也为员工们描绘了一个充满希望的未来。

Authing的博客 1015

构建用户身份基础设施,推动新能源汽车高质量发展

企业的困惑或许不再是“ 0 到 1 阶段的破冰”该如何落实,而是在技术创新和政策支持不断变化的情况下,如何抓住用户并在消费者心中构筑存在感,才是未来竞争中的关键。

Authing的博客 1669

后量子时代,未来密码该何去何从?

在量子信息时代来临之前,如何能够有效抵御量子攻击就成了不得不面对的问题之一。

Authing的博客 1773

当网络安全成为业务增长的重要保障,企业应该如何应对?

企业需要关注的网络安全层面有哪些?企业管理者又应如何应对网络安全问题,准确制定企业安全策略呢?

Authing的博客 1733

七部门重磅发文!未来产业创新该如何发展?

如何确保产业数字安全基础上,加快发展未来产业,支撑推进企业创新发展?

Authing的博客 1026

Authing 身份云入选崔牛会「2024 中国企业服务云图」

提供 OPA(组织过程管理) SaaS ,完善 OPA 计算监控、事件监控、决策监控、决策设计器、代码编写等,覆盖决策计算全生命周期,实现事件驱动的低代码决策引擎和自动化风控引擎。Authing 目前已经服务包括可口可乐、招商银行、三星集团、复星集团、万科集团、海底捞在内的 40000+ 企业和开发者。2024 版云图汇聚了时下国内 3500+ 家数字化领域内优秀的 To B 企业,涵盖技术支撑、数据资产、协同办公、垂直行业等 18 个类别,覆盖万亿级市场,堪称中国企业数字化选型的“宝典”,

Authing的博客 750

管理员分级管控三大模式,提高企业内部管理效率

企业在整个权限管理落地过程中,如何解决这些难题,提高企业内部管理效率?

Authing的博客 2057

零信任网络标准发布,企业如何构建下一代可信任的身份安全体系?

在这样的背景下,企业如何构建下一代可信任的身份安全体系?

Authing的博客 1303

克服数字化三重担忧,从构建身份基础设施开始

如何消除三重担忧,成为企业数字化转型之路的重中之重。

Authing的博客 955

AI 欺诈事件频出,如何重塑身份认证的安全性?

人工智能时代的到来,将不仅仅是科技盛宴,更是信息安全对网络威胁的一次攻坚战。

Authing的博客 1386

教育信创全面加速,如何促进高校信息化建设?

教育数字化转型不是针对一般教育设施的简单更新升级,而是针对整个教育体系的深层次积累,引领教育行业从传统的教育模式向智能化教育迈进,形成适应数字时代的全新教育形态。

Authing的博客 1928

Authing 入选中国信通院《 2023 高质量数字化转型产品及服务全景图》

近日,中国信通院“铸基计划”发布了《高质量数字化转型产品及服务全景图( 2023 )》。Authing 身份云成功入选 IT 维护与运营领域并获得证书。

Authing的博客 704

第三方 Cookie 被禁用?企业该如何实现用户精准运营和管理?

如何收集和利用第一方数据填补第三方 Cookie 的空白,成为许多企业和营销人员需要重新思考的问题。

Authing的博客 1331

从密码认证到 Passkey 无密码,告别传统密码时代

Authing 作为国内领先的身份认证服务商,率先推出 Passkey 无密码认证服务,填补国内密码认证缺陷,降低数据泄漏风险。

Authing的博客 1566

Authing 受邀参加 2023 QCon 全球软件开发大会

Authing 作为身份领域领先企业受邀参加此次大会,与客户深度对话塑造数字化发展未来。

Authing的博客 695

2023 年最先进认证方式上线,Authing 推出 Passkey 无密码认证

密码这一传统身份认证方式已经难以得到可靠的认证保障,随之出现各种新身份认证方式,其中就包括无密码身份认证。

Authing的博客 1554

Authing 分级管理员重磅上线,实现权限超细粒度分级管

为了满足企业内部复杂的组织架构设计需求,企业需要实现“统一管理,分级授权”的权限管理模式,满足企业内部不同角色的需求,提高了整体管理的透明度和可操作性。

Authing的博客 1585

身份自动化工作流,帮助您快速提高工作效率

身份自动化不仅仅简单将手动步骤数字化,更是将企业从传统、低效、甚至过时的工作流程中解放出来,形成数字化引擎,将企业的管理方式从繁琐转变为简洁,从手动迈向自动,为整个组织注入了新的活力。

Authing的博客 1210

从身份治理出发,助力教育行业回归教育本质

在实施国家教育数字化战略行动中,如何利用数字技术优势助力教育治理变革,提升区域、学校教育治理水平成为深化教育改革的一个热点话题。

Authing的博客 1193

身份管理如何提升中小企业生产力?

在此困局中,企业希望依托数字化以求业务增长、人员增效、企业扩张以及产品核心竞争力的稳固。

Authing的博客 1025

先进制造身份治理现状洞察:从手动运维迈向自动化身份治理时代

当前形势下,我国制造业发展之路该如何走?

Authing的博客 1680

Authing CEO 谢扬来信 |我的原则

从忙碌的工作中短暂抽身,有很多感想,不吐不快,借此机会,倾我所有,诉我原则。

Authing的博客 1165

从 RBAC 到 NGAC ,企业如何实现自动化权限管理?

谁具有特定数据的访问权限?您的企业是否实现了对员工权限的有效管理?

Authing的博客 2205

如何为您的企业选择合适的多因素认证?

如何评估企业的 MFA 需求,如何选择合适的 MFA 解决方案?这些都成为企业在如今安全环境下需要思考的问题。

Authing的博客 1266

放弃无谓的「技术氛围」幻想,准备战斗

资本绝不会做亏本买卖,一家公司在市场中的一切动作都以盈利为目的。

Authing的博客 225

Authing 入选《 2023 年央国企信创应用与实践研究报告》优秀服务商

Authing 身份云作为国内唯一事件驱动云原生身份平台入选《 2023 年央国企信创应用与实践研究报告》优秀服务商。

Authing的博客 728
上一篇: Authing Share|系统安全与防范
下一篇: Authing 双周动态:应用市场上架飞书等应用(5.24-6.6)
Authing
Authing 企业官方账号 企业官方账号
博客等级 码龄6年 863粉丝 304原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值