---
title: "使用 OAuth2 M2M 进行出站认证"
---

OAuth2 M2M（Machine to Machine）用于后端服务间认证，比 API Key 更安全，且支持令牌自动刷新。它无需用户参与——凭据由客户端自身的 Client ID / Secret 换取。需要用户授权的场景见 [OAuth2 用户委托](/cn/docs/framework/oauth2-user-federation)。本页只讲 M2M 特有的部分；`VeIdentityFunctionTool` / `VeIdentityMcpToolset` 的通用用法、`into` 默认值与常见问题见[安全概述](/cn/docs/framework/security#出站认证)。

## 创建 OAuth2 M2M 凭据

1. 登录火山引擎控制台，进入 **Agent Identity** 服务。
2. 选择 **身份认证 > 出站凭据托管 > OAuth Client**。
3. 点击 **新建 > 新建 OAuth Client**。
4. 在 **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`：

```python
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 页面](/cn/docs/framework/api-key#在代码中使用)，仅 `auth_config` 不同）。

`scopes` 接受多个权限范围；省略时使用控制台为该 Provider 配置的默认范围：

```python
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 用户委托](/cn/docs/framework/oauth2-user-federation)。
