当你使用 Managed Agents 构建需要访问第三方服务的应用时,可以通过 Vaults(凭据保管库)保存并隔离每个应用用户的凭据。你的服务端只需为每个用户创建 Vault、写入 Credential,并保存用户与 vault_id 的映射,无需自行维护密钥存储,也无需在每次调用中重复传递 token。
创建 Session 时,通过 vault_ids 传入当前用户的 Vault ID;Agent 调用 MCP 服务时会自动使用对应的 Credential 完成鉴权。这样,同一个 Agent 可以安全地服务多个用户,并分别访问各自有权限的第三方资源。
准备工作#
开始前你需要:
- 已创建的 API Key:配置为环境变量
ARK_API_KEY,详情请参见 API Key 管理。 - 已创建的 Agent:详情请参见 定义 Agent。
- 已创建的 Environment:详情请参见 配置云环境。
本章节示例的 Base URL 与鉴权方式详情请参见 Base URL 及鉴权。
创建 Vault#
Vault 是绑定到某个终端用户的凭据集合。给它一个 display_name,可选用 metadata 标记以便映射回你自己的用户记录:
curl https://ark.cn-beijing.volces.com/api/v3/vaults \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"display_name": "Alice",
"metadata": {"external_user_id": "usr_abc123"}
}'
响应是完整的 Vault 记录:
{
"type": "vault",
"id": "vlt-20260701120000-pqrst",
"display_name": "Alice",
"metadata": {"external_user_id": "usr_abc123"},
"created_at": "2026-06-29T10:00:00Z",
"updated_at": "2026-06-29T10:00:00Z"
}
添加凭据#
| 类型 | 适用场景 | 注入方式 |
|---|---|---|
mcp_oauth |
MCP 服务器用 OAuth 2.0 | Session 连接 MCP URL 时注入访问令牌;启用自动刷新后,平台在令牌临近过期时换取新令牌 |
static_bearer |
MCP 用固定 Bearer token(API Key、个人访问令牌) | 无刷新流程,直接注入 |
mcp_static |
MCP 使用固定密钥,需要以 Bearer、自定义 Header 或 URL 查询参数注入 | 通过 injection_type 选择注入位置 |
environment_variable |
通过环境变量鉴权的命令行、SDK、直接 API 调用 | 沙箱内是不透明占位符,出口处替换为真实值,Agent 永远看不到密钥 |
env_oauth |
CLI 或 SDK 使用短效 OAuth 访问令牌 | 按 secret_name 注入;启用自动刷新后,在 Session 使用凭据时换取新令牌 |
你提供的实际密钥(token、access_token、refresh_token、client_secret、secret_value)是敏感的只写字段,API 响应不会返回这些字段。
MCP OAuth 凭据#
当 MCP 服务器使用 OAuth 2.0 时,使用 mcp_oauth。创建凭据时,配置 MCP 服务地址和当前访问令牌。
如需启用自动刷新,创建或更新凭据时同时提供 expires_at 和完整的 refresh 对象。Session 连接 MCP 服务时,平台读取该凭据。访问令牌进入 expires_at 前 5 分钟刷新窗口时,平台自动换取并注入新令牌。该机制由读取操作触发,不在后台定时刷新。
refresh.token_endpoint_auth.type 三选一:
none:公共客户端,不提供client_secret。client_secret_basic:使用client_secret的 HTTP Basic 鉴权,同时提供client_secret。client_secret_post:把client_secret放在 POST 请求体里,同时提供client_secret。
curl https://ark.cn-beijing.volces.com/api/v3/vaults/vlt-20260701120000-pqrst/credentials \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"display_name": "Alice Slack",
"auth": {
"type": "mcp_oauth",
"mcp_server_url": "https://mcp.slack.com/mcp",
"access_token": "xoxp-...",
"expires_at": "2099-12-31T23:59:59Z",
"refresh": {
"token_endpoint": "https://slack.com/api/oauth.v2.access",
"client_id": "1234567890.0987654321",
"scope": "channels:read chat:write",
"refresh_token": "xoxe-1-...",
"token_endpoint_auth": {
"type": "client_secret_post",
"client_secret": "abc123..."
}
}
}
}'
MCP 静态 Bearer 凭据#
当 MCP 服务器接受固定 Bearer token(API Key、个人访问令牌) 时,用 static_bearer。无需刷新流程:
curl https://ark.cn-beijing.volces.com/api/v3/vaults/vlt-20260701120000-pqrst/credentials \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"display_name": "Linear API key",
"auth": {
"type": "static_bearer",
"mcp_server_url": "https://mcp.linear.app/mcp",
"token": "lin_api_your_linear_key"
}
}'
MCP 静态凭据#
当 MCP 服务器使用固定密钥,但不一定采用 Bearer 鉴权时,使用 mcp_static。通过 injection_type 选择注入方式:
bearer:以Authorization: Bearer <token>请求头注入。不要传injection_name,token中也不要包含Bearer前缀。header:以自定义请求头注入,必须通过injection_name指定请求头名称。query:以 URL 查询参数注入,必须通过injection_name指定参数名。
以下示例将密钥注入 X-API-Key 请求头:
{
"auth": {
"type": "mcp_static",
"mcp_server_url": "https://mcp.example.com/mcp",
"token": "<MCP_API_KEY>",
"injection_type": "header",
"injection_name": "X-API-Key"
}
}
环境变量凭据#
用 environment_variable 通过环境变量对外部服务鉴权,适用于命令行、SDK 或直接 API 调用。
networking.allowed_hosts 控制密钥可以被替换到哪些出站主机:
"type": "limited"+ 显式主机列表(推荐)。"type": "unrestricted"(仅当调用方访问的域名无法提前枚举时使用)。
curl https://ark.cn-beijing.volces.com/api/v3/vaults/vlt-20260701120000-pqrst/credentials \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"display_name": "Notion API key for sandbox",
"auth": {
"type": "environment_variable",
"secret_name": "NOTION_API_KEY",
"secret_value": "sk-your-secret-here",
"networking": {
"type": "limited",
"allowed_hosts": ["api.notion.com"]
}
}
}'
环境 OAuth 凭据#
当 CLI 或 SDK 需要从环境变量读取 OAuth 访问令牌时,使用 env_oauth。创建凭据时,先配置当前访问令牌(access_token)、注入令牌的环境变量名(secret_name),以及允许携带该令牌的目标主机(networking)。
对于会过期的访问令牌,可以启用自动刷新。创建或更新凭据时,提供以下信息:
- 刷新时机:通过
expires_at提供当前访问令牌的过期时间。 - 令牌端点:通过
refresh.token_endpoint提供第三方 OAuth 服务的令牌端点。 - 刷新令牌:通过
refresh.refresh_token提供换取新访问令牌的凭据。 - 客户端身份:通过
refresh.client_id和refresh.token_endpoint_auth提供 OAuth 客户端身份及鉴权方式。鉴权方式需要客户端密钥时,还需提供refresh.token_endpoint_auth.client_secret。
Session 访问 networking 允许的目标主机时,平台读取该凭据。访问令牌进入 expires_at 前 5 分钟刷新窗口时,平台调用 refresh.token_endpoint 获取新令牌、更新凭据,再把新令牌注入出站请求。该机制由读取操作触发,不在后台定时刷新。
curl https://ark.cn-beijing.volces.com/api/v3/vaults/vlt-20260701120000-pqrst/credentials \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"display_name": "GitHub CLI OAuth",
"auth": {
"type": "env_oauth",
"access_token": "<OAUTH_ACCESS_TOKEN>",
"expires_at": "<ACCESS_TOKEN_EXPIRES_AT>",
"refresh": {
"token_endpoint": "https://github.com/login/oauth/access_token",
"client_id": "<OAUTH_CLIENT_ID>",
"refresh_token": "<OAUTH_REFRESH_TOKEN>",
"token_endpoint_auth": {
"type": "client_secret_post",
"client_secret": "<OAUTH_CLIENT_SECRET>"
}
},
"secret_name": "GITHUB_TOKEN",
"networking": {
"type": "limited",
"allowed_hosts": ["api.github.com"]
}
}
}'
凭据约束#
- 每个 Vault 内的匹配键必须唯一。
mcp_server_url(mcp_oauth、static_bearer、mcp_static)和secret_name(environment_variable、env_oauth)在同一 Vault 的有效凭据中不能重复。重复创建返回 409。 - 匹配键不可变。 要修改
mcp_server_url或secret_name,需要删除旧凭据,再创建新凭据。 - 每个 Vault 最多包含 100 个凭据。 超出限制时返回 409。
MCP 类型凭据(mcp_oauth、static_bearer、mcp_static)在创建时会立即连接目标 MCP 服务器探测握手。无法完成握手时,创建请求返回 4xx 错误。environment_variable 和 env_oauth 不在创建时验证密钥或访问令牌是否有效;无效值会在 Session 访问对应主机时表现为鉴权错误或下游服务错误,但不会阻止 Session 继续运行。
在创建 Session 时引用 Vaults#
创建 Session 时传 vault_ids 数组,把一个或多个 Vaults 挂到 Session:
curl https://ark.cn-beijing.volces.com/api/v3/sessions \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent": "agent-20260701120000-abcde",
"environment_id": "env-20260701120000-fghij",
"vault_ids": ["vlt-20260701120000-pqrst"],
"title": "Alice Slack digest"
}'
运行时行为:
- 当 Agent 连接到某 MCP URL 时,没有任何凭据匹配
mcp_server_url→ 尝试匿名连接;若服务器要求鉴权则报错。 - 多个 Vaults 都包含匹配凭据 → 第一个匹配的 Vaults 优先。
- 在 多 Agent 中,Vaults 凭据按线程生效;若某 Agent 自身定义里声明了匹配的 MCP 服务器,该 Agent 用这些凭据鉴权。
轮换凭据#
密钥值和 display_name 可以更新。结构性字段(mcp_server_url、secret_name、token_endpoint、client_id) 在创建后即被锁定。要修改结构性字段,删除旧凭据再创建新的:
curl https://ark.cn-beijing.volces.com/api/v3/vaults/vlt-20260701120000-pqrst/credentials/vcrd-20260701120500-uvwxy \
-X POST \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"auth": {
"type": "mcp_oauth",
"access_token": "xoxp-new-...",
"expires_at": "2099-12-31T23:59:59Z",
"refresh": {"refresh_token": "xoxe-1-new-..."}
}
}'
OAuth 凭据的自动刷新信息可按以下方式更新:
- 启用自动刷新:在
auth中同时提供expires_at和完整的refresh对象。token_endpoint_auth.type为client_secret_basic或client_secret_post时,同时提供client_secret;为none时,省略client_secret。 - 更新自动刷新信息:只提供需要变更的字段,未提供的字段保留原值。可以更新
refresh_token、token_endpoint_auth、resource和scope,不能修改token_endpoint和client_id。
凭据生命周期#
Session 运行期间,平台在使用凭据时重新解析当前值。更新或删除凭据后,后续请求会读取新的凭据状态,无需重启 Session。
对于已启用自动刷新的 mcp_oauth、env_oauth 凭据,读取操作会在访问令牌进入 5 分钟刷新窗口时触发自动刷新。刷新成功后,平台持久化新的访问令牌和过期时间;OAuth 服务同时轮换 refresh_token 时,平台也会保存新的 refresh_token。
其他操作#
- 列出 Vault、凭据:
GET /vaults或GET /vaults/{vault_id}/credentials;分页返回,按最新优先排序。 - 如需停用单个凭据,删除对应凭据;如需停用某个终端用户的全部凭据,删除对应 Vault。删除操作不可恢复。