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

简介

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

授权流程

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

先看下资源管理:

image

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

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

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

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

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

image

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

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

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

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

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

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

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

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

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

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

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

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

权限系统的架构

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

image

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

  • 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

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

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

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

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

X CAN DO Y ON RESOURCE Z

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

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

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

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

image

也可以创建基于scope的permission:

image

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

image

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

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

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

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

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

本文已收录于 http://www.flydean.com/authorization-service/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容