Files

48 lines
1.6 KiB
Markdown
Raw Permalink Normal View History

2026-05-28 17:03:08 +08:00
# FileAuth 上传凭证FileAuth.java
2026-05-28 16:39:51 +08:00
2026-05-28 17:03:08 +08:00
生产与 [`docs/FileAuth.java`](FileAuth.java) 中 `createUploadToken` **完全一致**HMAC 对 **policy JSON 明文**)。
2026-05-28 16:39:51 +08:00
2026-05-28 17:03:08 +08:00
## 生产 putPolicy
2026-05-28 16:39:51 +08:00
```json
{"scope":"<bucket>","deadline":<unix>}
```
- `scope`**仅 bucket 名**(如 `other-doc`**不要** `bucket:filename`
- **无** `returnBody`
2026-06-04 08:15:50 +08:00
- HTTP 上传为 **§2.3.4 表单上传**`multipart/form-data`,字段名 **`file`**,请求头 `X-Authorization: <uploadToken>`
2026-05-28 16:39:51 +08:00
2026-05-28 17:03:08 +08:00
## 生成步骤
2026-05-28 16:39:51 +08:00
| 步 | 说明 |
|----|------|
2026-05-28 17:03:08 +08:00
| 1 | 构造 putPolicy JSON字段顺序`scope``deadline` |
| 2 | `sign = urlsafe_base64( HMAC-SHA1(secret, UTF-8(policyJSON)) )` |
| 3 | `policyB64 = urlsafe_base64( UTF-8(policyJSON) )` |
| 4 | `uploadToken = AccessKey + ':' + sign + ':' + policyB64` |
2026-05-28 16:39:51 +08:00
## Base64 填充
| 环境变量 | 说明 |
|----------|------|
2026-05-28 17:03:08 +08:00
| `FILEAUTH_B64=padded`(默认) | URL-safe Base64 **含 `=`**(对应 Java `Base64.URL_SAFE \| NO_WRAP` |
2026-05-28 16:39:51 +08:00
| `FILEAUTH_B64=raw` | 无填充(联调仍 403 时可试) |
## 错误对照
| HTTP body | 含义 |
|-----------|------|
| `forbidden` | forward-goIP / `X-Forward-Token` |
| **`404`(纯文本)+ 403** | 已过 forward**政务云 token 验签失败** |
## Web 调试
2026-05-28 17:03:08 +08:00
- `/fileauth`:生成 upload profile token
2026-05-28 16:39:51 +08:00
- `/upload`A=Runner 默认 tokenB=本次上传 `tokenInfo``scope` 应为 bucket
2026-05-28 17:03:08 +08:00
实现:[`internal/fileauth/upload.go`](../internal/fileauth/upload.go)
2026-05-28 16:39:51 +08:00
## 上传频率
见 [`internal/hyfile/throttle.go`](../internal/hyfile/throttle.go)`FILE_UPLOAD_MIN_INTERVAL`(默认 `10s`)。