阿里拍卖4个深交所交易席位各60万成交
06-18
策略描述语言(论文) 摘要:“为了保护云资源的安全,防止数据泄露和越权访问,云平台的资源必须实现访问控制,但是当前主流的云平台通常使用自己的安全策略语言和访问控制机制,这会带来两个问题:如果云用户想要使用多个云平台,则需要进行访问控制。学习不同的策略语言并分别编写;云服务提供商需要设计自己的符合自己平台的安全策略语言和访问控制机制,开发成本很高。
提出了基于访问控制策略描述语言PML及其实现机制PML-EM,PML支持BLP、RBAC、ABAC等访问控制模型的表达。 PML-EM实现了策略语言独立性、访问控制模型独立性和编程语言独立性三个特性,从而降低了用户编写策略的成本和云服务提供商开发访问控制机制的成本。
在线论文地址:它是一个强大高效的开源访问控制框架,支持Go、Java、Node.js、Javascript(React)、Python、PHP、.NET、C++、Rust等十几种语言。 Casbin开源项目由北京大学罗阳博士于2007年创立,核心维护团队20多人。
Casbin在行业内具有广泛的影响力。目前,它被 Intel、VMware、Orange、RedHat 和 T-Mobile 等公司作为开源使用,而被腾讯云、思科和 Verizon 等公司作为闭源使用。
详情请参阅 Casbin 主页。 Casbin Go 主项目目前在 GitHub 上有 0+ star,随着所有语言、插件等的实现,可以达到 0+ star。
官方地址:Effect、Request、MatcherModel 语法及策略存储 模型语法 模型 CONF 至少应包含四个部分:[request_definition]、[policy_definition]、[policy_effect]、[matchers] 如果模型使用 RBAC,还需要添加[角色定义]部分。模型 CONF 可以包含注释。
注释以 # 开头,对整行进行注释。模型存储与策略不同。
模型只能加载,不能保存。因为我们认为模型不是动态组件,不应该在运行时修改,所以我们没有实现 API 来将模型保存到存储中。
策略存储在Casbin中,适配器(Casbin的中间件)实现了将策略规则写入持久层的细节。 Casbin用户可以调用适配器的LoadPolicy()方法从持久层加载策略规则,也可以调用SavePolicy()方法将策略规则保存到持久层。
支持的 ModelACL(访问控制列表) 具有超级用户 ACL 且不具有用户 ACL 的访问控制列表:对于没有身份验证或用户登录的系统特别有用。不带资源的ACL:有些场景可能只针对资源类型,而不是单一资源,比如写文章、读日志等权限。
它不控制对特定文章或博客的访问。 RBAC(基于角色的访问控制)支持资源角色的RBAC:用户和资源可以同时拥有角色(或组)。
对域/租户的RBAC支持:用户可以为不同的域/租户设置不同的角色集。 ABAC(基于属性的访问控制):支持使用resource.Owner这种语法糖来获取元素的属性。
RESTful:支持路径,例如 /res/*、/res/:id 和 HTTP 方法,例如 GET、POST、PUT、DELETE。拒绝优先:支持允许和拒绝授权,拒绝优先于允许。
优先级:策略规则按照优先顺序排列,类似于防火墙规则。模型 模型原语定义说明 最简单的 ACL 模型配置代码语言: javascript copy[request_definition]r = sub, obj, act[policy_definition]p = sub, obj, act[policy_effect]e = some(where (p.eft ==allow ))[matchers]m = r.sub == p.sub && r.obj == p.obj && r.act == p.act 在线编辑器: * @desc 权限验证 * @author Tinywan(万少博) * @date /3/29 10:37 */declare(strict_types=1);命名空间 app\common\library;使用 app\common\service\JwtService;使用 Casbin\Exceptions\CasbinException;使用 tauthz\facade\Enforcer ;使用 think \facade\Log;use think\Request;class Permission{ //不验证权限节点 protected array $public_rule = [ '/f/v1/books', '/f/v1/homes', ]; /* * * @desc: 权限验证检测 * @return bool * @author Tinywan(ShaoBo Wan) */ public function check(): bool { $url = $this->request->baseUrl(); if (in_array($url , $this->public_rule)) { 返回 true; } 尝试 { $uid = JwtService::getCurrentUID();$action = $this->request->method(); if (!Enforcer::enforce(strval($uid), $url, strtoupper($action))) { 返回 false; } } catch (CasbinException $exception) { Log::error('机舱授权异常' . $exception->getMessage());返回假;返回真; }}中间件调用 class AuthorizationMiddleware.php 代码语言:javascript 复制 class AuthorizationMiddleware{ /** * @param $request * @param Closure $next * @return mix * @throws AuthorizationException * @throws Exception */ public function handle($request , 闭包 $next): Response { if (!(new Permission($request))-> check()) { throw new AuthorizationException(); }返回 $next($request); }}接口访问权限流程代码语言:javascript copy+-------------------- ----- |资源存在吗? (如果是私有的,通常会在身份验证检查后进行检查)+------------------------ | |否 | v 是v +------------------------ |已登录? (经过身份验证,又名具有会话或 JWT cookie)或 +-------------------- ---------------- | |否 | |是 3xx v v +------------------------(不透露) |可以访问资源吗? (许可、授权、...)或 +------------------------ 重定向 | |登录 否 | |是 | | v v OK ,重定向,...(或:不显示)(或:如果私有,则资源不存在)(或 3xx:重定向) 基于角色的 RBAC 模型(Model)配置 keyMatch2 函数:URL 路径或:模式 ,例如: /v1/notices/:idregexMatch 函数:任意字符串、正则表达式模式,如:GET、get、Get、(GET|POST|DELETE) 实际代码模型配置 rbac-model.conf 代码语言:javascript copy[request_definition]r = sub, obj, act[policy_definition]p = sub, obj, act[role_definition]g = _, _[policy_effect]e = some(其中 (p.eft == 允许))[匹配器]m = g (r.sub, p.sub) && keyMatch2(r.obj, p.obj) && regexMatch(r.act, p.act) || r.sub == 6 策略表记录区县策略:上面针对区县区域角色定义了5个策略,分别是通知公告接口的列表、创建、修改、删除、详情。
帐号权限:帐号33、帐号34继承区县政策组区域,帐号33、帐号34会有通知。公告界面的列表、创建、修改、删除、详情的访问权限。
小问题:只需要为账户开通特殊的接口权限(如:健康码查询接口)。该权限不能添加到策略组区域。
那么可能的解决方案有哪些呢? : 《第一版方案(低级):入侵,修改代码,在代码级别添加判断并释放到账户》 《第二版方案(中级):非入侵,修改代码,通过AOP解决》第三版方案(进阶):非侵入式,无需修改代码,策略规则表只需添加以下策略之一》传统框架VS现代框架原理中使用Casbin。常驻内存框架。
Swoole、Workerman、ReactPHP以多进程模式运行,多个进程中的数据相互隔离(每个进程独立,互不干扰,这意味着每个进程维护自己的资源、变量、类实例) , ETC。 )。
注意:内存溢出,垃圾收集机制(GC)。场景:当Enforcer中的策略发生变化时,调用Watcher将消息推送到消息队列(MQ)。
监听消息队列的Enforcer收到后,会自动刷新实例中的策略。注意:在 PHP-FPM 环境中,不需要 Watcher,因为每个请求都是一个独立的 fpm 进程,并且会实例化一个新的 Enforcer 实例。
这是通过workerman/redis的发布订阅模式实现的,workerman/redis是一个基于workererman(观察者模式)的PHP异步redis客户端。 Enforcer & Watcher实例化Enforcer并同时监控订阅策略的变化并实时刷新到内存中。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-18
06-17
06-17
06-18
06-17
06-18
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用