全部产品
Search
文档中心

应用身份服务:Token Exchange操作指导

更新时间:Apr 08, 2026

概述

Token Exchange(令牌交换)是基于 RFC 8693 标准协议的身份认证与授权机制,允许客户端使用一个现有的安全令牌(subject_token)向授权服务器换取一个新的安全令牌。该功能适用于需要身份传递、委托授权及最小权限访问的场景。

本文档介绍如何在 IDaaS 中配置和使用 Token Exchange 功能。如需了解 Token Exchange 的更多概念性内容(如技术原理、应用场景等),请参阅什么是 Token Exchange

前提条件

已完成 Agent 身份安全配置,详细配置可参考Agent 身份安全配置指导

说明

Token Exchange 在 Agent 身份安全配置中的 Agent 应用上默认开启,无需单独配置。

使用限制

限制项

说明

令牌签发限制

IDaaS 授权服务器仅接受自身签发的令牌进行交换

权限限制

客户端需具备目标受众和权限范围的授权

令牌状态限制

主体令牌必须在有效期内且能被正确验证

交换次数限制

令牌仅支持有限次数的交换,防止无限循环授权

令牌类型限制

当前仅支持 Access Token 之间的交换

操作步骤

步骤一:获取初始访问令牌

在发起令牌交换之前,您需要先获取一个有效的主体令牌(subject_token)。可通过 OAuth 2.0 授权码模式获取。

步骤二:发起令牌交换请求

向 IDaaS 授权服务器的令牌端点发起 POST 请求,交换新的访问令牌。

请求端点

POST https://{domain}/api/v2/iauths_system/oauth2/token

其中 {domain} 为您的 IDaaS 实例访问域名。

请求参数

参数

类型

是否必需

示例值

说明

grant_type

String

urn:ietf:params:oauth:grant-type:token-exchange

固定值

subject_token

String

{subject_token}

代表主体身份的安全令牌

subject_token_type

String

urn:ietf:params:oauth:token-type:access_token

主体令牌类型标识

requested_token_type

String

urn:ietf:params:oauth:token-type:access_token

请求的令牌类型标识,默认为urn:ietf:params:oauth:token-type:access_token

scope

String

mcp-server|user:read

权限范围,格式:<audience>|<scope>

audience

String

mcp-server

目标服务的逻辑标识,需与 scope 中的 audience 保持一致

client_id

String

{client_id}

客户端 ID

client_secret

String

{client_secret}

客户端密钥

请求示例

curl --location --request POST 'https://{domain}/api/v2/iauths_system/oauth2/token' \
--data-urlencode 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
--data-urlencode 'subject_token={subject_token}' \
--data-urlencode 'subject_token_type=urn:ietf:params:oauth:token-type:access_token' \
--data-urlencode 'requested_token_type=urn:ietf:params:oauth:token-type:access_token' \
--data-urlencode 'scope={audience}|{scope}' \
--data-urlencode 'audience={audience}' \
--data-urlencode 'client_id={client_id}' \
--data-urlencode 'client_secret={client_secret}'

成功响应

{
  "access_token": "eyJraWQiOiJBVVRIU0tFWVNYNDZ4bmRLN0RMdmM3NUx5Y0NuYkVFczFWTExQb2tzIiwiYWxnIjoiUlMyNTxxxx...",
  "issued_token_type": "urn:ietf:params:oauth:token-type:access_token",
  "token_type": "Bearer",
  "expires_in": 3600,
  "expires_at": 1772605468,
  "scope": "user:read"
}

响应参数说明

参数

类型

说明

access_token

String

新颁发的访问令牌

issued_token_type

String

颁发的令牌类型

token_type

String

令牌类型,固定为 Bearer

expires_in

Integer

令牌有效期,单位:秒

expires_at

Integer

令牌失效时间戳

scope

String

令牌的权限范围

错误码

HTTP 状态码

错误码

说明

解决方案

400

invalid_grant

gant_type 不正确

检查gant_type 是否正确

400

invalid_request

请求参数缺失或格式错误,主体令牌无效

检查请求参数是否完整且格式正确,主体令牌是否有效

400

invalid_target

目标受众或权限范围不合法

检查 audience 和 scope 参数是否符合规范

401

unauthorized_client

客户端未授权

检查 client_id 和 client_secret 是否正确

步骤三:使用新令牌访问资源

使用交换后的新令牌访问目标资源服务。

curl --location --request GET 'https://{resource_server}/api/protected-resource' \
--header 'Authorization: Bearer {access_token}'

其中:

  • {resource_server}:目标资源服务的访问域名

  • {access_token}:步骤二中获取的新访问令牌

典型应用场景

Agent 身份安全场景

在企业 Agent 服务集成场景中,Token Exchange 可实现安全的身份传递和委托授权。

场景描述

某企业部署了差旅规划助手 Agent 和人力资源 MCP 服务。当员工通过差旅系统访问 Agent 规划行程时,差旅规划助手需要访问人力资源 MCP 服务以获取员工的职级信息和差旅预算等数据。

服务节点对应关系

令牌交换工作流程

Agent 身份安全场景

前端服务(Front Service)

差旅系统

资源服务器 A

差旅规划助手 Agent

资源服务器 B

人力资源 MCP 服务

授权服务器

IDaaS 授权服务器

优势

  • 安全地将授权传递到人力资源 MCP 服务

  • 保留业务操作的主体身份信息(员工),无需二次认证授权

  • 完整的授权传递链路,便于溯源和审计

审计与溯源

控制台审计日志

在 IDaaS 控制台日志模块的调用日志中,无论令牌交换请求是否成功,都会记录一条事件类型为"Token 交换"的日志。日志中会记录:

  • 令牌交换的客户端

  • 账户(主体)

  • 主体令牌等核心要素信息

令牌内省能力

IDaaS 令牌交换所颁发的令牌为 JWT 格式,本身具备内省能力。IDaaS 授权服务器在实现令牌交换能力时会自定义一个声明 _idaas_imp 来记录令牌交换的链路。

令牌 Payload 示例

{
  "sub": "user_xxxxxxxxxxxxxxxxxxxx",
  "scope": "user:read",
  "jti": "AT_03",
  "iss": "https://{domain}/api/v2/iauths_system/oauth2",
  "iat": 1772604268,
  "nbf": 1772604268,
  "exp": 1772605468,
  "aud": "mcp-server",
  "client_id": "app_03",
  "_idaas_iid": "idaas_xxxxxxxxxxxxxxxxxxxx",
  "_idaas_tag": "user-auth",
  "_idaas_imp": {
    "jti": "AT_02",
    "client_id": "app_02",
    "_idaas_imp": {
      "jti": "AT_01",
      "client_id": "app_01"
    }
  }
}

字段说明

字段

说明

AT_03 和 app_03

本次令牌交换颁发的令牌 ID 和发起客户端 ID

AT_02 和 app_02

本次交换使用的主体令牌的 ID 和客户端 ID

AT_01 和 app_01

历史前一次交换的主体令牌 ID 和客户端 ID