权限系统的基本概念和架构

简介: 权限系统的基本概念和架构

目录



简介


权限系统是我们在系统设计和应用中一种非常常见的系统。一般来说权限系统的功能分为认证和授权两种。认证就非常简单的,验证完用户名密码就算认证成功,而授权里面的套路就很多了,本文将会详细讲解权限系统中的一些基本概念和设计上面要注意的问题,希望大家能够喜欢。


授权流程


在授权流程中主要有三个部分,分别是资源管理,权限和策略管理,策略的执行。


先看下资源管理:


image.png


首先我们需要创建一个资源服务器,然后在资源服务器中创建各种资源,最后对各种资源设置一些scope,scope就是跟资源相关的的一些可执行的操作。


什么是资源呢?资源可以是一个web页面,一个RESTful资源,一个文件等等。


举个例子,假如我们有一个图书馆资源服务器,图书馆有一个本《人月神话》的书,那么这本书就被称作资源。接下来我们需要为这个资源定义一些可操作性的scope,或者说策略。比如说只有本校的学生才能够借阅这本书。


当我们定义好资源之后,就需要对这些资源进行一些权限和策略的设置,这就需要进行权限和策略管理。


看下权限和策略管理的流程:


image.png


首先是创建策略,然后定义权限,最后将权限和策略进行关联。


策略就是定义的一些去访问某些资源或者权限的操作,策略是和具体的权限是分离的,策略只制定了在什么情况下可以做(某些事情),或者在某些情况下不能做(某些事情),这些事情就是后面创建的权限。


比如说,拥有user角色可以做什么事情,就是一种策略。


策略定义好了,我们就可以创建权限了,权限很好理解,比如:借《人月神话》的书的权限。


我们把策略和权限组合起来就是:拥有user角色的,可以借《人月神话》这本书。


通用的策略有很多种,比如说基于属性的访问策略,基于角色的访问策略,基于用户的访问策略,基于上下文的访问策略,基于时间的访问策略,基于规则的访问策略或者其他的自定义策略等。


通常来说,基于角色的访问策略role-based access control (RBAC)是最常用的。


我们把用户赋予相应的角色,然后在访问资源的时候根据不同的角色策略来执行不同的permission操作。


虽然RBAC非常有用,用途也非常广泛,但是它还是有下面的几个缺点:


  1. 资源和角色是强绑定的,如果我们对角色进行一些添加,删除和修改操作,将会影响到所有相关联的资源。
  2. 对于角色的修改则可能需要我们对代码进行修改。
  3. 如果你的应用程序非常大的话,使用RBAC可能会出现一些错误。
  4. RBAC的灵活性不够强,不能够做到更加细粒度的权限控制。


最后,我们看一下策略的执行。


策略的执行就是真正的在资源服务器上执行相应的授权工作。一般来说我们在资源服务器中有一个 Policy Enforcement Point(PEP)来和授权服务器进行交互,根据授权服务器返回的授权信息来执行相应的资源操作。


权限系统的架构


先看一张权限系统的基本架构图:


image.png


其中有下面几个关键组件:


  • PAP全称是Policy Administration Point,它是一个权限管理的后台页面,我们需要这样的一个后台界面来配置和管理权限和资源。
  • PDP全称是Policy Decision Point,它提供了一些决策策略,通过这些策略将授权请求发送到相应的位置,并根据请求的权限对策略进行相应的决策。
  • PEP全称是Policy Enforcement Point,在不同的资源服务器中执行相应的策略。
  • PIP全称是Policy Information Point,在判断和决策策略的时候,可以从中获取相应的属性信息。


上图中,Storage就是数据的存储和分类,这里我们主要存储resouce,scope,permission和policy这4种对象。


resource代表的是要访问的对象,可以是一个或者多个对象的集合。比如说:web程序中的页面等等。资源是受保护的对象,需要为资源配置一些权限。


每个资源都有一个唯一的标识符,可以代表一个资源或一组资源。 例如,你可以管理一个银行帐户资源,该资源代表并定义了所有银行帐户的一组授权策略。 但是,你也可以使用另一个名为Alice's Banking Account的资源,该资源代表由单个客户拥有的单个资源,该资源可以具有自己的一组授权策略。


我们看一个resource的例子:


image.png


上图中,我们将不同的URI定义为resource。并给不同的resource起了唯一的名字。


Scope是对资源的一系列操作,比如你可以对资源进行读,写或者编辑,删除操作,这些都可以被称之为scope。当然,你也可以指定resource中的某个属性作为scope。


然后就是Permission,权限将受保护的对象与是否授予访问权限的策略相关联。


比如我们有下面一个权限:


X CAN DO Y ON RESOURCE Z


x表示的是一个或者多个用户,角色或者groups,或者是他们的组合。


Y表示的是对资源的一种操作。


Z就是资源了,比如/index页面。


我们可以创建基于resource的permission:


image.png


也可以创建基于scope的permission:


image.png

Policy定义了要授予对象访问权限必须满足的条件。Policy并没有指明要保护的对象,只是指定了访问给定对象必须满足的条件。


image.png

比如上面的Policy,指定了什么样的角色,针对什么样的client,制定出来的什么样的逻辑。


有了策略就需要一个Policy Provider,Policy Provider主要为我们提供特定策略类型的实现。


为了做好策略评估的工作,我们还需要一个策略评估引擎,通过这个engine来执行策略的评估工作。


除此之外,作为一个认证服务器,我们还需要对外提供认证服务,那么最好的办法就是提供OAuth2或者OpenID Connect的token服务。


另外我们还需要一个Protection API,用于resource server和权限管理服务进行交互。

相关文章
|
1月前
|
存储 分布式计算 大数据
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
57 3
|
1月前
|
监控 持续交付 API
深入理解微服务架构:构建高效、可扩展的系统
【10月更文挑战第14天】深入理解微服务架构:构建高效、可扩展的系统
80 0
|
6天前
|
传感器 算法 物联网
智能停车解决方案之停车场室内导航系统(二):核心技术与系统架构构建
随着城市化进程的加速,停车难问题日益凸显。本文深入剖析智能停车系统的关键技术,包括停车场电子地图编辑绘制、物联网与传感器技术、大数据与云计算的应用、定位技术及车辆导航路径规划,为读者提供全面的技术解决方案。系统架构分为应用层、业务层、数据层和运行环境,涵盖停车场室内导航、车位占用检测、动态更新、精准导航和路径规划等方面。
33 4
|
16天前
|
前端开发 安全 关系型数据库
秒合约系统/开发模式规则/技术架构实现
秒合约系统是一种高频交易平台,支持快速交易、双向持仓和高杠杆。系统涵盖用户注册登录、合约创建与编辑、自动执行、状态记录、提醒通知、搜索筛选、安全权限管理等功能。交易规则明确,设有价格限制和强平机制,确保风险可控。技术架构采用高并发后端语言、关系型数据库和前端框架,通过智能合约实现自动化交易,确保安全性和用户体验。
|
24天前
|
存储 数据管理 调度
HarmonyOS架构理解:揭开鸿蒙系统的神秘面纱
【10月更文挑战第21天】华为的鸿蒙系统(HarmonyOS)以其独特的分布式架构备受关注。该架构包括分布式软总线、分布式数据管理和分布式任务调度。分布式软总线实现设备间的无缝连接;分布式数据管理支持跨设备数据共享;分布式任务调度则实现跨设备任务协同。这些特性为开发者提供了强大的工具,助力智能设备的未来发展。
76 1
|
1月前
|
存储 监控 负载均衡
|
1月前
|
传感器 存储 架构师
构建基于 IoT 的废物管理系统:软件架构师指南
构建基于 IoT 的废物管理系统:软件架构师指南
72 9
|
1月前
|
消息中间件 NoSQL Kafka
大数据-52 Kafka 基础概念和基本架构 核心API介绍 应用场景等
大数据-52 Kafka 基础概念和基本架构 核心API介绍 应用场景等
61 5
|
1月前
|
消息中间件 存储 分布式计算
大数据-53 Kafka 基本架构核心概念 Producer Consumer Broker Topic Partition Offset 基础概念了解
大数据-53 Kafka 基本架构核心概念 Producer Consumer Broker Topic Partition Offset 基础概念了解
64 4
|
1月前
|
存储 安全 开发工具
百度公共IM系统的Andriod端IM SDK组件架构设计与技术实现
本文主要介绍了百度公共IM系统的Andriod端IM SDK的建设背景、IM SDK主要结构和工作流程以及建设过程遇到的问题和解决方案。
53 3

热门文章

最新文章