绑定已验证身份与策略¶
本配方展示应用层如何使用已验证 principal 进行 Core 授权。Core 提供授权 Hook 与最终操作 复查;应用必须认证调用方、绑定租户与资源,并 fail closed。
它不是身份提供商、策略决策服务、持久审批库或 exactly-once 效果机制。
模式¶
- 在 Core 之外认证。 通过身份系统验证调用方,生成包含 actor ID、租户、角色和 过期时间的 principal。
- 上下文中只放已验证数据。 绝不从模型输出或工具参数读取 actor ID/角色。
- 在 Hook 中授权。 拒绝缺失、过期或畸形 principal;检查角色、租户、资源、工具名 与参数。
- 复查最终操作。 Middleware 或审批编辑可能改变工具名/参数;Core 会对最终值再次授权。
- Fail closed。 必需身份或策略基础设施不可用时返回错误,不得放行执行。
受测示例¶
可运行示例是独立的 L4 配方模块
examples/recipes/identity-go。
在该目录运行:
GOWORK=off go test -mod=readonly -run Identity -v ./...
| 检查 | 预期结果 |
|---|---|
| 缺少已验证 principal | 拒绝;工具零副作用 |
| principal 已过期 | 拒绝;工具零副作用 |
| 租户不匹配 | 拒绝;工具零副作用 |
| 模型声称 admin 角色 | 忽略;拒绝;工具零副作用 |
| 匹配租户的有效 operator | 允许一次 |
配方在认证后把 principal 放入 context value。真实服务中,该值必须来自已验证请求上下文或 身份中间件,而不是 prompt 或模型。
Python 认证 HTTP 服务
language/python/examples/service-auth
展示了服务边界上的同类绑定。它验证应用局部 HMAC Bearer Token,把 subject 和 tenant
绑定到 Session,拒绝过期或不在允许列表中的租户,只授权 get_time,并在运行完成后
保存 Checkpoint。它还可以把决策委托给应用拥有的 HTTP 策略决策服务,并在该服务不可用时
fail closed。运行确定性测试:
cd language/python/examples/service-auth
python -m unittest test_service.py -v
TypeScript 服务示例
language/typescript/examples/service-auth
使用 Node 标准库实现同样的 HMAC 身份、租户允许列表、可选外部策略决策服务和
Checkpoint 模式。
重要限制¶
- 工具参数中的角色字符串是不可信输入。Hook 必须使用已验证 principal。
- 身份授权不替代沙箱、最小权限凭据、网络控制或实时安全。
- 审批决定不是持久审批库;绑定、过期、撤销和审计需由应用定义。
- 工具调用成功不证明外部效果已提交。高影响操作需要效果账本或对账。