使用 OAuth2 M2M 进行出站认证
OAuth2 M2M(Machine to Machine)用于后端服务间认证,比 API Key 更安全,且支持令牌自动刷新。它无需用户参与——凭据由客户端自身的 Client ID / Secret 换取。需要用户授权的场景见 OAuth2 用户委托。本页只讲 M2M 特有的部分;VeIdentityFunctionTool / VeIdentityMcpToolset 的通用用法、into 默认值与常见问题见安全概述。
创建 OAuth2 M2M 凭据
- 登录火山引擎控制台,进入 Agent Identity 服务。
- 选择 身份认证 > 出站凭据托管 > OAuth Client。
- 点击 新建 > 新建 OAuth Client。
- 在 OAuth2 流程 中选择 机器对机器(M2M),点击 确定。
配置 Provider 时可选三种来源:
| 来源 | 需填写 |
|---|---|
| 内置 Vendor(推荐):Lark / Coze / Google / GitHub | Client ID、Client Secret |
| OIDC 配置(自定义) | 发行者 URL(Discovery URL,如 https://accounts.google.com/.well-known/openid-configuration)、Client ID、Client Secret、权限范围(至少含 openid) |
| 自定义 OAuth2 配置 | Client ID、Client Secret、权限范围、Issuer、授权端点、令牌端点 |
在代码中使用
用 oauth2_auth(..., auth_flow="M2M") 创建配置。OAuth2 凭据默认注入到 access_token 参数,因此无需设置 into:
from veadk.integrations.ve_identity import VeIdentityFunctionTool, oauth2_auth
import aiohttp
async def call_service(access_token: str, endpoint: str):
headers = {"Authorization": f"Bearer {access_token}"}
async with aiohttp.ClientSession() as session:
async with session.get(endpoint, headers=headers) as resp:
return await resp.json()
auth_config = oauth2_auth(
provider_name="my-oauth2-m2m-provider",
scopes=["api://your-service/.default"],
auth_flow="M2M",
)
tool = VeIdentityFunctionTool(func=call_service, auth_config=auth_config)同一配置也可用于 VeIdentityMcpToolset(用法同 API Key 页面,仅 auth_config 不同)。
scopes 接受多个权限范围;省略时使用控制台为该 Provider 配置的默认范围:
auth_config = oauth2_auth(
provider_name="my-provider",
scopes=["api://service1/.default", "api://service2/.default"],
auth_flow="M2M",
)与 API Key 的区别
API Key 是固定凭证;M2M 用 Client ID / Secret 换取短期令牌,由 Agent Identity 自动刷新,更适合生产环境。M2M 是服务自身的身份,不涉及用户登录;若需代表某个用户访问,请用 OAuth2 用户委托。