全部产品
Search
文档中心

应用身份服务:身份传递与调用链审计

更新时间:May 25, 2026

介绍 Agent ID Guard 如何通过 RFC 8693 令牌交换机制实现身份链路的完整传递与调用链审计,确保每次下游 API 调用均可追溯到自然人。

背景

合规和安全审计的核心诉求是回答:究竟是谁、通过哪些路径、在什么时间、对什么数据做了什么操作?

在 Agent 链路里,这件事要比传统应用复杂得多——一次"我帮我自己查请假"可能涉及 1 个用户、1 个客户端、1 个 Agent、N 个下游服务、M 次 Token Exchange。

场景与痛点

合规要求示例:

  • 财务系统要求所有数据访问必须可追溯到自然人。

  • 安全团队要求"任何一次下游 API 调用,都能回答:是哪个前端入口、哪个 Agent 实例、哪条上游令牌触发的。"

  • 监管要求 90 天内对越权访问可定位、可举证。

如果只看下游访问日志的"用户 = 小王",并不足以满足上述要求——还需要知道这次"小王"的请求是经由哪个 Agent、哪个客户端发起的。

解决方案:基于 RFC 8693 的令牌交换(sub 透传 + _idaas_imp 链路 + 交换计数)

阿里云 Agent ID Guard 在出站访问令牌中保留并扩展了三类字段:

字段

含义

用途

sub

与入站访问令牌一致的用户唯一标识

后端做行级权限、审计;保证身份不丢失

client_id

当前持有令牌的客户端,等于发起 Token Exchange 的 Agent 的 app id

后端可识别"是哪个 Agent 在调我"

_idaas_imp

上游来源信息,含上游令牌的 jti 与 client_id

反向追踪:本次出站访问令牌是基于哪张入站访问令牌、由哪个上游客户端而来

_idaas_exchange_count

交换深度计数,每经一次 Token Exchange +1

限制无限委派;可在 Agent ID Guard 侧对深度做策略性拒绝

审计溯源介绍

出站访问令牌中包含了入站访问令牌的令牌 ID 和客户端 ID 信息,示意如下:

{
  "_idaas_imp": {
    "jti": "ATTU…(原入站访问令牌的 jti)…",
    "client_id": "app_nfiiybmikzo2fnmabpectnxxxx"
  }
}

通过这两个字段,结合 Agent ID Guard 的审计日志,可以串联出完整链路:

image.jpeg

这条链路无须客户、Agent、下游服务自己拼接,Agent ID Guard 在颁发令牌时已经把"上游证据"写进了下游令牌。

不可冒用:为什么 Agent 不能伪造别人的身份

Agent 即便完全自由地决定"我要去调下游服务",也不能凭空捏造 sub:

  1. 出站访问令牌的签发只能通过 RFC 8693 Token Exchange,且必须提交一张合法的入站访问令牌作为主体令牌。

  2. Agent ID Guard 颁发出站访问令牌时,代表身份的 sub强制取自主体令牌的 sub,并由 Agent ID Guard 用自己的私钥签名,并且所申请下游服务权限与 sub 之前必须存在合法的授权关系。

  3. Agent 的 Client Secret / 私钥仅用于"证明我是 Agent",不能用来直接签发用户令牌。

  4. 下游服务用 Agent ID Guard 的 JWKS 公钥校验 iss、aud、签名后即可信任 sub,无须信任 Agent 自身。

验证效果

验证项

预期结果

解码出站访问令牌,检查 sub

与登录用户一致

解码出站访问令牌,检查 _idaas_imp.client_id

与发起调用的客户端 app id 一致

解码出站访问令牌,检查 _idaas_exchange_count

单次链路通常为 1;多级 Agent 转发时可观测到递增

修改 Agent 的代码、伪造 sub 后尝试自行签发"出站访问令牌"

下游 JWKS 校验签名失败,请求被拒

撤销客户端 → Agent 的入站授权后,再尝试 Token Exchange

失败:底层依赖的入站访问令牌已无法获得