访问控制:对象、配置与机制
身份、资源、动作与授权策略
身份与权限要区分认证和授权。先描述主体、资源、动作与租户,再选择角色或属性规则;生产管理还要确保策略版本能够发布、撤销并在所有执行点及时生效。
认证与授权的分工
身份认证验证凭据,授权决定可信主体能对哪个资源做什么。客户端传来的用户名不能直接成为可信主体;网关认证后仍需可信传递身份并检查有效期、受众和租户。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,不能由引擎名推断效应。
继续阅读
- 应用实践
- 知识专题
- 命令与对象入口