鉴权 API
Project Key 换取 Access Token
POST https://tiangongtuxue.com/api/app/projects/access-token
Authorization: Bearer <project-key>
请求体为空。接口成功时返回:
{ "token": "<short-lived-access-token>" }
| 返回参数 | 类型 | 说明 |
|---|---|---|
token | string | 工程短期访问令牌,用于后续 /api/v1 请求 |
Project Key 不应下发到浏览器;Access Token 只短期缓存。当前响应以 token 为顶层字段,客户端不要假设存在 data 包装。
JavaScript
const base = process.env.TUO_API_BASE_URL ?? 'https://tiangongtuxue.com/api';
const projectKey = process.env.TUO_PROJECT_KEY;
const response = await fetch(`${base}/app/projects/access-token`, {
method: 'POST',
headers: { Authorization: `Bearer ${projectKey}` },
});
if (!response.ok) throw new Error(`access-token failed: ${response.status}`);
const { token: accessToken } = await response.json();
Python
import os
import requests
base = os.getenv("TUO_API_BASE_URL", "https://tiangongtuxue.com/api")
project_key = os.environ["TUO_PROJECT_KEY"]
r = requests.post(
f"{base}/app/projects/access-token",
headers={"Authorization": f"Bearer {project_key}"},
timeout=15,
)
r.raise_for_status()
access_token = r.json()["token"]
Java
var client = java.net.http.HttpClient.newHttpClient();
var request = java.net.http.HttpRequest.newBuilder()
.uri(java.net.URI.create(base + "/app/projects/access-token"))
.header("Authorization", "Bearer " + projectKey)
.POST(java.net.http.HttpRequest.BodyPublishers.noBody())
.build();
var response = client.send(request, java.net.http.HttpResponse.BodyHandlers.ofString());
if (response.statusCode() / 100 != 2) throw new RuntimeException("access-token failed");
// 使用 JSON 库读取顶层 token 字段
curl
curl --fail-with-body -X POST "$TUO_API_BASE_URL/app/projects/access-token" \
-H "Authorization: Bearer $TUO_PROJECT_KEY"
常见错误:401 表示缺少或格式错误的 Authorization;403 表示 Project Key 无效、工程不可用或已被停用。