全部產品
Search
文件中心

Identity as a Service:Token Exchange操作指導

更新時間:Apr 09, 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}

用戶端識別碼

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 和發起用戶端識別碼

AT_02 和 app_02

本次交換使用的主體令牌的 ID 和用戶端識別碼

AT_01 和 app_01

歷史前一次交換的主體令牌 ID 和用戶端識別碼