portal-app-exchange

Installation
SKILL.md

portal-app-exchange · 跨应用调用(令牌交换)布线与排错

App A 代表用户调 App B = 拿一个 aud=B 的 TDT,走 OAuth Token Exchange,严格不可提权。 本文可直接在 App 自己的仓库使用;声明写入 app.manifest.json,平台授权由管理员处理。/apps/<key>/ 是线上 URL 路径。

本文件读法:先读「模型一页纸」对齐五件事,再读末尾「红线」避免踩坑;中间章节是按需的——布线时读「布线新链路」,写发起方时读「交换请求 / 发起方实现」,调不通时直接看「排错决策树」。每节都不长,且彼此独立。

模型一页纸(动手前先对齐这五件事)

放行 = 同时满足:

  1. A→B 授权关系存在(app_exchange_grants);
  2. B allowExchange = true;
  3. A ∈ B 的 exchangeWhitelist;
  4. 用户已同意"A 代表我访问 B"(exchange_consents,服务端交换不带会话,consent 必须事先记录);
  5. 结果 scope = 用户已授权给 A 的 scopes ∩ B 声明 scopes ∩ 本次请求上界(若提供);来源无 consent 行的旧路径才回退到 A 入站 TDT scopes。发起方 A 的清单必须把 B 命名空间 scope 声明进自己的 scopes(且 B ∈ A 的 exchangeTargets)。嵌套交换沿用中间 App 自己的用户授权,不以更窄的入站票替代它;自省仍与当前声明、同意及 grant 相交。

被调方 B 看到的:kind:"user"、有 user_id、azp = A(出处归因);B 照常四道闸鉴权、无需改代码。

Installs
180
Repository
xgent-ai/skills
GitHub Stars
1
First Seen
Jul 21, 2026