Bureau 接入 Organizations
在产品后端验证 user_token、查询 Membership 并执行资源权限
Bureau 接入 Organizations
Bureau 是可信产品后端。Bureau 向产品预先配置的 HTTPS Bureau 发送 Federation user_token,Bureau 先验证用户和 Bureau,再查询 Organization Membership。
授权顺序
Bureau
-> user_token + 产品请求
-> Bureau 验证 Federation JWT 和 bureau_id
-> Bureau 从资源记录读取 organization_id
-> Bureau 查询 Federation Membership
-> Bureau 执行产品角色与资源权限Membership 通过只代表用户属于 Organization。它不代表用户可以访问 Organization 下的每个产品资源。
验证 user_token
Bureau 使用预先配置的 Federation issuer 和 JWKS 校验:
- JWT 算法与签名;
iss和aud;exp、nbf;user_id和bureau_id;bureau_id是否属于当前产品允许的范围。
Bureau 不应记录 Authorization Header,也不能把 Token 转发给产品配置之外的服务。
查询 Membership
Bureau 可以携带用户提交的同一个 Token 查询 Federation:
GET /v1/organizations/membership/get?organization_id=org_01J...
Authorization: Bearer ub_...成功响应包含当前 Organization 与 active Membership。用户退出或被移除后,接口返回 403 NOT_AN_ORGANIZATION_MEMBER。
检查资源归属
产品资源表保存 organization_id:
CREATE TABLE projects (
project_id TEXT PRIMARY KEY,
organization_id TEXT NOT NULL,
name TEXT NOT NULL
);处理 /v1/projects/:project_id 时,Bureau 先读取 Project,再用 project.organization_id 查询 Membership。不能相信客户端额外提交的 Organization ID 来决定资源归属。
产品权限
Bureau 在 Membership 通过后执行自己的权限模型:
Federation Membership
-> 用户属于 Organization
Product Role / ACL
-> 用户能否读取、编辑或管理具体资源Organization Owner/Admin/Member 只负责 Federation 中的组织治理。产品需要的 editor、viewer、billing_admin 等角色由 Bureau 保存。
缓存与撤权
要求即时撤权的写入、管理或敏感读取应在线查询 Federation。低风险读取可以使用短时缓存,最长撤权延迟等于缓存 TTL。
缓存键至少包含 Federation issuer、user_id 和 organization_id。Bureau 必须为缓存 TTL 做出明确选择,Organizations Service 不再维护跨服务器撤权 Outbox。
检查清单
- Bureau URL 来自可信产品配置
- 只通过 HTTPS 接收
user_token - 校验 issuer、audience、签名、时间和
bureau_id - 不记录或转发 Authorization Header
- 从资源记录读取
organization_id - 对敏感操作在线查询 Membership
- Membership 通过后继续执行产品权限