# 身份认证

为你的产品调用 Beeuni 接口提供身份认证。

Canonical page: https://beeuni.ai/docs/zh/sdk/auth

## 创建客户端

SDK 每次请求都会调用 `getToken`。令牌存储和刷新由你的应用管理。

```ts
import { createBeeuni } from '@beeuni/sdk';

const beeuni = createBeeuni({
  backendUrl: 'https://api.beeuni.ai/v1',
  getToken: async () => process.env.BEEUNI_API_KEY ?? null,
});

const projects = await beeuni.projects.list();
```

## 选择凭据

- 服务端脚本或 CI 可使用个人 API key。将其保存在服务端，并选择所需的最小权限范围。
- Agent 等非人工调用方可使用服务账号。为其分配所需的项目角色；新建服务账号默认没有项目访问权限。
- 需要代表用户操作的应用可使用 [Sign in with Beeuni](/docs/zh/sdk/sign-in)。服务端处理器管理 OAuth 令牌及其刷新。

## 处理被拒绝的请求

`401` 表示凭据缺失、过期或无效。`403` 可能表示权限不足或功能未启用；重试前先查看响应中的错误码。

如果令牌获取函数缓存了会轮换的令牌，可为其附加 `invalidate(rejectedToken)`。SDK 会在使用被拒绝的令牌重试一次前调用该回调。

## 保护凭据

不要把服务端 API key 写入浏览器代码、URL 或日志。浏览器请求应通过你的服务端或 OAuth 代理。凭据泄露后，在 **Account → Tokens** 撤销它。

[完整示例](/docs/zh/sdk/example)
