栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

oauth2在分布式微服务架构下基于角色的权限设计(RBAC)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

oauth2在分布式微服务架构下基于角色的权限设计(RBAC)

在前两节的基础上,对权限控制作进一步的分析与设计。

RBAC(Role-Base Access Control,基于角色的访问控制)

本篇内容基于个人理解,不当之处,欢迎批评指正。

前两篇内容:

  • 【图文详解】搭建 Spring Authorization Server + Resource + Client 完整Demo
  • 【oauth2 客户端模式】Spring Authorization Server + Resource + Client 资源服务间的相互访问
1、OAuth2中用户访问的基本流程

  • 用户经过认证/授权后,进入客户端(认证中心给客户端发放令牌),客户端携带令牌访问对应的资源。
  • 客户端是用户和资源之外的第三方,要想访问资源必须得到用户的允许。
  • 用户拥有资源,通过客户端去访问,把访问权限赋于给了客户端。
2、SCOPE、ROLE、AUTH 区别
  • SCOPE:范围;指用户授权客户端可以访问的范围。客户端只能在这个范围内去访问。是针对客户端来说的。
  • ROLE:角色;是用户的身份。是针对用户来说的。
  • AUTH:权限;是角色所拥有的。角色与权限是多对多的关系;一个角色可以有多个权限,一个权限也可以同时被多个角色所拥有。权限也可以直接针对于用户,如果用户不指定角色,可以直接把权限赋于用户。
区别含义面向对象
SCOPE范围客户端
ROLE角色用户
AUTH权限角色 或 用户

3、server、resource、client 中访问主体的区别

从图中可以看出,在每个里面的访问主体及权限是不同的(这里的权限是统称,包括SCOPE、ROLE、AUTH,不仅仅指AUTH)

  • 当用户登录后,在认证中心内,访问主体就是用户,它的权限就是 ROLE(AUTH)
  • 在客户端中,访问主体还是用户,但是权限发生了变化,增加了用户所授于客户端的SCOPE;共包含:ROLE(AUTH)和 SCOPE
  • 客户端携带令牌访问资源,在资源服务器中访问主体就是客户端,权限只有:SCOPE;因为客户端是在用户授权下去访问的,所以在认证中心生成令牌时,只包括了用户授于的SCOPE,不可能把用户的身份ROLE也赋于客户端。
4、访问控制分析

通过上面的分析可以发现,资源端只有 SCOPE,不可能用 ROLE 或 AUTH 去控制用户的访问。认证中心不负责访问资源,要想通过 ROLE 或 AUTH 去控制用户访问资源,只能在 客户端 去操作。资源API在客户端有对应的接口,要想控制资源API,就控制客户端的对应接口就可以了。只要用户能访问客户端的某个API接口,它就能访问与之对应的资源API。

  • 资源API 面向 SCOPE 开放;

  • 客户端API 面向 ROLE 或 AUTH 开放;

5、权限设计
  • 客户端
客户端分类被授于的 SCOPE
电脑端SCOPE_1
手机端SCOPE_2
内部资源服务SCOPE_0
  • 资源端
资源分类允许访问的 SCOPE说明
r1/res1SCOPE_0、SCOPE_1、SCOPE_2资源服务器1 中的 资源1,可以被三个客户端访问
r1/res2SCOPE_0、SCOPE_1资源服务器1 中的 资源2,只可以被电脑端、内部资源访问
r2/res1SCOPE_0、SCOPE_2资源服务器2 中的 资源1,只可以被手机端、内部资源访问
r2/res2SCOPE_1、SCOPE_2资源服务器2 中的 资源2,只可以被电脑端、手机端访问
r3/res1SCOPE_2资源服务器3 中的 资源1,只可以被手机端访问
r3/res2SCOPE_0资源服务器3 中的 资源2,只可以被内部资源访问
  • 用户与角色
用户角色
张三ROLE_1
李四ROLE_2
  • 角色与权限
权限角色
AUTH_1ROLE_1
AUTH_2ROLE_2
AUTH_3ROLE_1、ROLE_2
AUTH_4ROLE_2

ROLE_1:包含 AUTH_1、AUTH_3

ROLE_2:包含 AUTH_2、AUTH_3、AUTH_4

  • 客户端与资源的访问绑定关系是一一对应的,应该相应稳定。客户端能访问某个资源就提供一个接口。不能随时修改。

  • 用户通过角色访问客户端,这个关系比较灵活, 相对松散。客户端中只需指定某个接口可以被哪些AUTH访问即可。

  • 角色ROLE与权限AUTH的关系相对稳定,但可以比客户端和资源的关系灵活,可以修改编辑。

  • 在项目设计阶段,应该首先确定客户端的种类,再基本确认项目中所涉及的角色。根据资源API功能,决定可以在哪些客户端中访问,需要哪些权限,应该把权限赋于哪种角色。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/921455.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号