Skip to content

访问控制:对象、配置与机制 ​

身份、资源、动作与授权策略 ​

身份与权限要区分认证和授权。先描述主体、资源、动作与租户,再选择角色或属性规则;生产管理还要确保策略版本能够发布、撤销并在所有执行点及时生效。

认证与授权的分工 ​

身份认证验证凭据,授权决定可信主体能对哪个资源做什么。客户端传来的用户名不能直接成为可信主体;网关认证后仍需可信传递身份并检查有效期、受众和租户。Casbin等策略引擎负责决策,不负责保存密码或完成登录,本课使用离线模型说明授权边界。

定义资源与动作 ​

请求三元组subject、object、action必须由可信上下文和规范化资源构成。文件路径、资源ID与租户要避免歧义,不把原始URL字符串直接当唯一资源身份。read和write是不同动作;读列表和读取单条也可能有不同策略。缺字段视为非法请求,不能补成管理员。

没有规则时拒绝 ​

默认拒绝要求没有显式允许就拒绝,包括未知主体、未知资源和策略加载失败。缺省拒绝与显式deny不同:前者没有许可,后者命中禁止规则。不能因策略后端暂时不可用就把所有请求放行;可用性方案应在允许范围内设计降级。

练习与参考解答 ​

练习:可信认证得到subject=alice,请求访问reports/7的write动作;策略只有alice对reports/7的read许可。是否允许?若客户端另传role=admin,应怎样处理?

参考解答

拒绝,read许可不能扩成write。客户端自报角色不能替代可信身份与授权上下文;请求需使用规范化资源标识和可信租户。记录subject/object/action及身份来源,缺失或策略加载失败都不能补成管理员。

RBAC、ABAC 与策略生效机制 ​

先明确可信主体、含租户的资源标识、动作与策略版本,再对照配套示例理解精确允许、显式拒绝和未知资源判定。

角色映射与继承 ​

RBAC把用户映射到角色再绑定权限,便于管理但会因角色叠加扩大权限。角色继承必须防止循环并解释传递方向;临时角色要有到期条件。最小权限以实际任务为依据,不因为用户在某团队就自动拥有所有生产资源。

显式拒绝优先 ​

本课拒绝优先规则为:先校验请求,再找同一主体资源动作的匹配规则;存在deny就拒绝,否则有allow才允许。规则排列不影响结果。不同引擎可配置不同效应,不能假设所有Casbin模型天然拒绝优先;需核对policy_effect并写允许与拒绝冲突的测试。

属性、时间与租户 ​

ABAC依据主体、资源、动作和环境属性决策。租户字段必须由认证上下文与资源所有权共同确定,不能信任客户端任填。时间条件需明确时区、边界与时钟来源;缺少关键属性时拒绝。动态属性缓存需要失效策略,否则离职或降权可能延迟生效。

执行点与绕过路径 ​

执行点放在服务端实际操作资源的位置,隐藏按钮仅改善界面。批量接口、导出、异步任务、内部调用也要执行授权;先检查再使用时还需防资源归属变化。统一决策接口减少遗漏,但不能把鉴权结果永久绑定到一个可变对象。

策略版本和缓存 ​

策略缓存应绑定主体身份、资源、动作及策略版本,不能只按用户名缓存允许结果。撤销要有传播上限和紧急失效手段,多实例同时运行时核对版本一致性。修改策略文件并不等于所有进程已加载;发布需要可追踪版本和生效证据。

练习与参考解答 ​

练习:同一subject/object/action同时匹配allow与deny,本课模型输出什么?若把同一个允许结果只按用户名缓存,下一次请求不同租户资源会怎样?

参考解答

本课显式拒绝优先,因此输出deny,与两规则排列顺序无关。只按用户名缓存会把一个资源的许可错误复用到其他资源/动作甚至租户;缓存键至少包含可信主体、资源、动作、租户相关属性及策略版本,并有撤销上限。其他Casbin模型需另核policy_effect,不能由引擎名推断效应。

继续阅读