获取Workload Access Token
本文为您详细介绍什么是工作负载访问令牌(Workload Access Token)以及获取Workload Access Token的方式。
什么是Workload Access Token
工作负载访问令牌(Workload Access Token)是一种不透明令牌(Opaque Token)。Agent Identity 服务在完成对调用者(通常为 Agent)的入站身份认证后,为工作负载身份(Workload Identity)签发Workload Access Token。Agent 可使用 Workload Access Token 访问 Agent Identity 服务,例如请求 OAuth 凭证提供商的访问令牌以访问外部资源。
Workload Access Token有以下特点:
仅可用于访问 Agent Identity 服务的相关接口。
令牌同时包含工作负载身份和最终用户身份(调用者)的信息。
该令牌由智能体运行时(如 百炼、AI Studio、LangStudio)在收到终端用户请求后,通过调用 Agent Identity 服务自动获取,并注入到智能体执行环境中。
Workload Access Token获取方式
Agent Identity 提供三种接口用于获取Workload Access Token,以适应不同的业务场景:
对比维度 |
|
|
|
核心场景 | 无用户参与,程序自动化 | 有用户参与且用户可以通过IdP完成登录 | 有用户参与 |
用户身份 | 无用户身份 | 通过标准的 JWT (JSON Web Token) 验证 | 通过自定义的用户 ID 字符串声明 |
安全性 | 高。令牌仅代表 Agent 自身,安全可控。 | 最高。Agent Identity 服务会验证 JWT 的签名、颁发者( | 中等。Agent Identity 服务完全信任调用方提供的 |
使用场景 | Agent 在后台运行,执行数据同步、报表生成等不涉及特定用户数据的自动化任务。 | 用户通过 OIDC 兼容的身份提供商(如阿里云、钉钉、企业自建 IdP)登录应用后,应用后端使用用户 IdP 签发的 JWT 为 Agent 换取令牌,执行需强身份验证的操作。 | 应用使用自建的用户系统,无法签发标准 JWT,但能为每个登录用户生成稳定且唯一的 ID。适用于快速集成各种自定义身份系统或在开发测试阶段模拟用户。 |
潜在风险/缺点 | 无法用于获取与用户个人账户绑定的凭证。 | 对调用方的要求最高,应用必须能够获取到用户的 JWT。 | 调用方必须自行承担确保 |
若 Agent 部署在智能体运行时(如百炼、AI Studio、LangStudio)中,则无需手动调用接口获取 Workload Access Token。智能体运行时会根据传入的用户上下文信息,自动选择获取令牌的方式:
用户上下文信息中包含用户令牌时,调用
GetWorkloadAccessTokenForJWT接口。用户上下文信息中不含用户令牌但包含用户 ID 时,调用
GetWorkloadAccessTokenForUserId接口。用户上下文信息中既不含用户令牌也不含用户 ID 时,调用
GetWorkloadAccessToken接口。
调用
GetWorkloadAccessToken*系列接口时,必须传入已配置的 Workload Identity 名称,且调用者必须完成入站身份认证。具体请参见入站认证方式。调用以上接口前,必须在 RAM 中为调用者授予相应的权限策略。所需权限如下:
GetWorkloadAccessTokenForJWT接口:
agentidentitydata:GetWorkloadAccessTokenForJWTGetWorkloadAccessTokenForUserId接口:
agentidentitydata:GetWorkloadAccessTokenForUserIdGetWorkloadAccessToken接口:
agentidentitydata:GetWorkloadAccessToken
手动获取Workload Access Token
可通过 Agent Identity SDK 获取 Workload Access Token。示例代码(Python)如下:
from agent_identity_python_sdk.identity.identity import IdentityClient
identity_client = IdentityClient(region="cn-zhangjiakou")
# Get Workload Access Token by using user token
workload_access_token = identity_client.get_workload_access_token(
workload_name="your-worload-identity-name",
user_token="your-user-token"
)
# Get Workload Access Token by using user id
workload_access_token = identity_client.get_workload_access_token(
workload_name="your-worload-identity-name",
user_id="your-user-id"
)
# Get Workload Access Token without user id or user token
workload_access_token = identity_client.get_workload_access_token(workload_name="your-worload-identity-name")返回示例:
{'RequestId': '7E363AE5-1BAE-1EC3-ADBA-8CC13CF1****', 'WorkloadAccessToken': 'eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiZGlyIn0...d8hxYw'}