题目重点:首页聚合多资源信息前先界定身份、租户与授权;查询和高风险操作记录可追溯审计。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练版首页显示用户有权访问的云资源摘要、最近活动和待处理动作;具体卡片不是原题固定要求。
- 身份提供方签发短期 token,应用有单租户/多租户边界和资源级授权;确切 IdP/协议题目未明确。
- 审计记录至少覆盖登录、敏感资源读取、权限变更与高风险操作,日志保留与敏感字段政策另定。
解题路线
- 登录入口验证 token 的签名、受众、过期、tenantId、主体和会话状态,服务端建立身份上下文;前端隐藏卡片不能代替服务端授权。
- 首页聚合器按用户/租户向各资源服务取摘要;每个服务在资源对象级执行授权,避免聚合器以高权限服务账号读取全量后误漏过滤。
- 权限模型将角色授予与资源关系/范围拆开:用户可拥有订阅级 Reader,却未必能查看另一个租户;继承与 deny 规则优先级须明示。
- 对列表分页和搜索把权限谓词推进查询或使用授权索引,避免先查一万条再过滤导致漏页与侧信道。缓存 key 至少带 tenant、subject、权限版本/有效期,权限撤销后不得继续回旧摘要。
- 审计事件保存 actor、tenant、action、resource、decision、time、requestId、来源和结果,追加写并限制读取权限;敏感值按政策脱敏,追踪 ID 串起网关、聚合器和资源服务。
- 加载首页时部分资源服务故障,可返回被授权的可用卡片及明确新鲜度/错误状态;不可因为授权服务超时就 fail-open 显示敏感内容。
手动走一遍
用户 U 属于租户 A,能看 A 的订阅资源,不能看租户 B。首页聚合器并行查询时带 U 的有效身份上下文,资源服务对每条资源核验 tenant 与权限;U 权限刚被撤销时,带旧权限版本的缓存必须失效或在短上界内到期。审计日志记录拒绝访问 B 的 requestId,但不在前端泄露 B 的资源名称。
规模与取舍
首页有 K 个后台服务时并行聚合延迟近似最慢依赖的 p95 加网络开销;串行调用则延迟累加。列表成本受可见资源数 V 与授权索引策略影响;审计写入随请求率与记录范围线性增长。题目未明确实际 SLA/QPS。
易错点与追问
容易失分的边界
- 只在前端隐藏无权卡片,后端 API 仍可读。
- 服务账号先读全租户数据再做应用层过滤,产生越权与分页错误。
- 缓存未包含租户/权限版本,撤权后仍返回敏感资源。
- 把审计日志当普通 debug 日志,缺主体、结果和不可篡改策略。
- 在授权系统故障时默认放行。
继续深挖
- 跨租户受邀用户如何区分当前 tenant context?
- 权限变更后如何刷新缓存和搜索索引?
- 审计写入失败时高风险操作应阻断还是继续?
- 首页部分服务故障时怎样给用户正确的新鲜度提示?
