Skip to content

Token 与 Claim 参考

GenAuth 的委托体系里有两种令牌,角色完全不同,字段形状也不同——集成时最常见的错误就是把它们混为一谈:

委托令牌(Delegate Token)访问令牌(兑换后)
是什么授权凭据:记录"谁授权了哪个 Agent、哪些范围、多久"访问凭据:Agent 实际拿去调资源的令牌
面向谁GenAuth(用于令牌兑换与验证)目标资源服务
怎么来授权确认完成后签发(见 快速开始用委托令牌经令牌兑换(RFC 8693)换出
有没有 act没有(GenAuth 扩展结构,见下)

两种令牌都是 JWT(RFC 7519),用标准方式验签。

表一:委托令牌完整字段

token_type 值为 eak_delegation_token 的 JWT。共 13 个顶层字段:

字段类型含义契约级别
token_typestring恒为 eak_delegation_token实现细节——识别令牌种类可用,但值本身可能随版本演进,勿硬编码判等作为唯一依据
issstring签发方稳定契约
substring被授权用户的 ID——委托令牌的主体永远是人稳定契约
azpstring发起委托的访问密钥(Access Key)ID稳定契约
agent_idstring被委托的 Agent 标识稳定契约
scopestring[]授予的 scope 列表(格式 服务.能力:动作,如 webagent.web_search:run稳定契约
audstring恒为 genauth:token-exchange——委托令牌只被令牌兑换端点接受稳定契约
eak_tenant_idstring所属工作空间 ID稳定契约
genauth_userpool_idstring用户所属用户池 ID实现细节——该字段已知存在改名演进风险,资源侧代码不得硬依赖;以本页核对版本为准
resource_bindingsobject工作空间绑定的产品资源(如 { gumem: { project_id }, webagent: { tenant_id } }实现细节
jtistring令牌唯一 ID稳定契约
grant_idstring本次授权记录 ID(贯穿授权生命周期)稳定契约
audit_idstring审计链 ID(见 审计与追责链稳定契约

委托令牌没有 act

act 只出现在兑换后的访问令牌里。如果你在委托令牌里找 act,说明拿错了令牌。

表二:兑换后访问令牌的增量字段

令牌兑换(POST /api/v3/eak/token-exchange)返回的访问令牌,在目标资源的标准 claims 之外,携带以下 GenAuth 扩展字段:

字段类型含义
actobject行动者标识:{ "type": "eak_delegation", "agent_id": "...", "grant_id": "...", "access_key_id": "..." }
exchange_idstring本次兑换的唯一 ID(入审计链)
product_resourceobject目标资源的绑定信息,形如 { "type": "gumem_project" | "webagent_tenant", "id": "..." }是对象不是字符串——不要拿它直接和 "gumem" 判等

act 是 GenAuth 扩展结构,不是 RFC 8693 的标准形状

RFC 8693 定义的 act claim 是嵌套 sub 形式("act": { "sub": "..." })。GenAuth 的 act 是带 type 判别字段的扩展对象——资源侧解析时必须显式判断 act.type === "eak_delegation",不要按标准嵌套形状解析。资源侧完整校验清单见 保护你的 API

访问令牌的 sub 仍是用户——"以谁的身份"永远指向人,"由谁行动"由 act 表达。这就是委托语义在令牌里的落点。

迁移与兼容期

SDK 侧的两个已弃用形状(@eazo/anima v0.2.1 起标注 @deprecated):

旧写法新写法
delegateAgent({ ... })delegateToken({ ... })
顶层 userId: "usr_x"user: { id: "usr_x" }

双轨兼容期

服务端接口在兼容期内仍接受顶层 userId 参数。这意味着:即使你的代码已全部迁移到 user: { id },持有你访问密钥的其他调用方仍可用旧参数发起委托。把"访问密钥的保管与轮换"当作第一道防线——威胁分析见 安全考量

验证令牌

  • 在线验证(推荐)POST /api/v3/eak/delegations/introspect,请求 { "token": "..." },有效时返回 { "active": true, ...全部 claims },无效或过期返回 { "active": false }。SDK 对应 anima.genauth.introspectDelegationToken({ token })
  • 本地验签:按 JWT 标准验签后,务必校验 aud(委托令牌恒为 genauth:token-exchange)与过期时间;资源侧对访问令牌还需做 scope 交集校验(见 保护你的 API)。

下一步