欢迎回来
从一个页面配置渠道、管理凭证并完成文件上传。
渠道概览
已配置的对象存储连接
| 渠道 | Provider | Bucket | 状态 |
|---|---|---|---|
| 加载中… | |||
快速开始
完成下面三步即可上传文件
填入华为云 OBS 的 Endpoint、Bucket 和 AK/SK。
为你的业务客户端创建一个 Token。
上传工作台会在浏览器内生成请求签名。
渠道管理
管理平台连接的对象存储服务,当前支持华为云 OBS。
新增 / 更新渠道
相同渠道 ID 保存时会更新原配置。
已配置渠道
密钥不会在列表中展示。
| 渠道 | Bucket | 状态 |
|---|---|---|
| 暂无渠道 | ||
访问 Token
Token 用于生成上传请求签名,原文只在创建时返回一次。
创建访问 Token
建议按业务系统分别创建并定期轮换。
Token 列表
已撤销的 Token 不能继续上传。
| 名称 | 创建时间 | 状态 | |
|---|---|---|---|
| 暂无 Token | |||
上传工作台
请求会使用 Token 在浏览器内生成 HMAC-SHA256 签名。
请求中的渠道参数决定使用哪一个 OSS 连接。
签名绑定方法、路径、时间戳、nonce、渠道和对象 Key。
平台校验签名后将文件流转发给华为云 OBS。
接口文档
平台全部 REST API、鉴权方式与上传签名算法说明。
接口总览
除健康检查外所有接口均返回 JSON,错误统一为 {"error":{"code","message"}} 结构。
| 方法 | 路径 | 鉴权 | 说明 |
|---|---|---|---|
| GET | /healthz | 无 | 健康检查 |
| POST | /api/v1/auth/login | ADMIN_KEY | 登录并创建 12 小时会话 Cookie |
| POST | /api/v1/auth/logout | 会话 | 退出登录并销毁会话 |
| GET | /api/v1/channels | 管理鉴权 | 渠道列表,不返回 AK/SK |
| POST | /api/v1/channels | 管理鉴权 | 创建渠道,相同渠道 ID 会覆盖更新 |
| POST | /api/v1/tokens | 管理鉴权 | 创建 Token,原文仅在创建响应中返回一次 |
| GET | /api/v1/tokens | 管理鉴权 | Token 元数据列表 |
| DELETE | /api/v1/tokens/{id} | 管理鉴权 | 撤销 Token,撤销后立即失效 |
| POST | /api/v1/tokens/{id}/temporary | 管理鉴权 | 基于现有 Token 生成临时 Token,仅存 Redis,到期自动失效 |
| POST | /api/v1/upload | Token + HMAC 签名 | multipart 上传文件并转发到对象存储 |
| POST | /api/v1/presign | Token + HMAC 签名 | 生成 OBS 直传临时链接,前端直接 PUT 上传、不经平台中转 |
管理鉴权
渠道与 Token 管理接口的两种认证方式
方式一:请求头携带 X-Admin-Key: <ADMIN_KEY>,适合服务端脚本调用。
方式二:先调用登录接口,浏览器持有 oss_session HttpOnly Cookie(12 小时有效),本控制台即使用该方式。
上传签名算法
签名绑定请求目标,防篡改、防重放
请求需携带 Authorization: Bearer <token>、X-OSS-Timestamp(Unix 秒,服务端允许 ±5 分钟偏差)、X-OSS-Nonce(每次请求唯一的随机串,重复使用返回 409)和 X-OSS-Signature。待签名字符串按以下顺序用换行连接,以 Token 原文为密钥做 HMAC-SHA256,结果使用 Base64(Raw URL)编码:
临时 Token(POST /api/v1/tokens/{id}/temporary 生成,仅存 Redis)签名方式相同,以临时 Token 原文为密钥;来源 Token 撤销或过期后其临时 Token 立即失效。
调用示例(Python)
保存为脚本,替换环境变量后可直接运行
| 错误码 | HTTP 状态 | 含义 |
|---|---|---|
| unauthorized | 401 | Token 无效、签名错误或时间戳偏差过大 |
| replay_detected | 409 | Nonce 已被使用,疑似重放请求 |
| channel_not_found | 404 | 渠道不存在或已停用 |
| invalid_object_key | 400 | 对象 Key 非法(为空、包含 .. 或超过 1024 字符) |
| provider_upload_failed | 502 | 对象存储侧上传失败,可重试 |
| invalid_hours | 400 | 临时 Token 时长必须是 1-24 小时 |
| temp_store_unavailable | 503 | 未配置 Redis 或 Redis 不可用,无法签发临时 Token |
| presign_failed | 502 | 直传链接生成失败,检查渠道 AK/SK 与 Endpoint 配置 |