# 认证

> 每个 amodb 请求带一个 32 位小写十六进制密钥。TMDB 风格用 api_key 或 Bearer 请求头，OMDb 风格用 apikey。图片无需密钥。错误密钥返回 401 和 status_code 7，被暂停则为 10。

## 密钥格式

密钥是 32 位小写十六进制字符，例如 `0123456789abcdef0123456789abcdef`。它与 TMDB v3 密钥的形式相同，所以为 TMDB 密钥构建的输入框和校验器都能接受它。

amodb 只存储每个密钥的 SHA-256 哈希。完整密钥只在创建时显示一次。如果丢失，请删除它并创建新的。

## TMDB 风格的调用

用两种方式之一发送密钥。两种方式在 `https://api.amodb.dev/3` 下的每个接口都有效。

| 方式   | 示例                               |
| ---- | -------------------------------- |
| 查询参数 | `?api_key=YOUR_KEY`              |
| 请求头  | `Authorization: Bearer YOUR_KEY` |

```bash
curl "https://api.amodb.dev/3/configuration" \
  -H "Authorization: Bearer $AMODB_KEY"
```

```js
const res = await fetch("https://api.amodb.dev/3/configuration", {
  headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` },
});
```

```python
import os
import requests

res = requests.get(
    "https://api.amodb.dev/3/configuration",
    headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
    timeout=10,
)
```

```php
<?php
$url = "https://api.amodb.dev/3/configuration?api_key=" . urlencode(getenv("AMODB_KEY"));
$config = json_decode(file_get_contents($url), true);
```

```go
req, _ := http.NewRequest("GET", "https://api.amodb.dev/3/configuration", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
res, err := http.DefaultClient.Do(req)
```

## OMDb 风格的调用

兼容 OMDb 的接口与 OMDb 一样，用 `apikey` 接收密钥。它与你用于 TMDB 风格调用的是同一个密钥。

```bash
curl "https://api.amodb.dev/omdb/?t=Inception&y=2010&apikey=$AMODB_KEY"
```

## 图片不需要密钥

`img.amodb.dev` 上的图片 URL 是公开的。不要把密钥加到图片 URL 上：`<img>` 标签会把密钥暴露给每一位访客。

## 把密钥留在服务器上

浏览器打包文件、移动应用或公开仓库中的密钥就是公开的。任何复制它的人都会消耗你的请求速率。请从你的服务器、无服务器函数或构建步骤中调用 amodb，只把数据传给客户端。

- 把密钥存放在环境变量或密钥管理服务中。
- 每个应用或环境使用一个密钥，并加上 `production` 或 `staging` 这样的标签。
- 密钥一旦泄露，立即删除。使用它的调用会马上失败。

## 错误

| HTTP | status_code | 含义                               |
| ---- | ----------- | -------------------------------- |
| 401  | 7           | 密钥缺失、格式错误或未知。                    |
| 401  | 10          | 密钥已被暂停。请写信至 <support@amodb.dev>。 |
| 402  | 36          | 你的套餐已过期。请在定价页支付新的周期。             |

全部错误码见[错误](https://amodb.dev/zh/errors/)。

## 常见问题

### Bearer 请求头比查询中的 api_key 更安全吗？

是的，稍微安全一些。查询字符串出现在服务器日志和浏览器历史中的频率比请求头更高。两者通过同一道检查，所以只要客户端允许，就使用请求头。

### 我能创建多少个密钥？

每个账户最多 10 个有效密钥。它们共用你套餐的请求速率，所以再加一个密钥不会增加容量。

### 更换套餐时，我的密钥会怎样？

你不需要做任何事。付款后一分钟内，每个有效密钥都会采用新的速率。

## 相关页面

- [快速开始](https://amodb.dev/zh/quickstart/): 发出第一次 amodb 调用：获取密钥，用 curl、JavaScript、Python、PHP 或 Go 请求电影详情，再加载海报。
- [速率限制](https://amodb.dev/zh/rate-limits/): amodb 按滑动 60 秒窗口内每分钟请求数限制每个密钥：按套餐为 20、40 或 120。读取速率限制响应头，并用 Retry-After 处理 429。
- [错误](https://amodb.dev/zh/errors/): amodb 的每个错误及其 HTTP 状态、TMDB status_code 和消息，以及 OMDb 错误结构。每个错误的含义和客户端下一步该做什么。
- [可接受使用政策](https://amodb.dev/zh/acceptable-use/): 说明使用 amodb 可以做什么、不可以做什么：可基于数据构建应用、网站、机器人和研究，但不得共享密钥、转售原始访问、规避限制或攻击服务。

更新于: 2026-10-18. Source: https://amodb.dev/zh/authentication/
