joywayer
c3a0ddbf8b
3.B 修复:七牛 token 401 bad token(base64URL padding + scope 字段)
## 问题
录音 + 转码正常,但七牛上传报:
status: 401 / error: bad token / QiniuUploadError error 1
## 根因
逐字段对照 daoqi QiniuManager.m:202-236 generateUploadToken,发现两处
关键不一致:
### 1. base64URL padding:新外壳删了 `=`,daoqi 保留
daoqi urlsafeBase64EncodeData:240-245 只替换 `+→-` 和 `/→_`,**保留
末尾 `=` padding**。
新外壳额外做了 `=→空` 替换,本意符合 RFC 4648 §5 base64URL 的可选
padding 删除,但七牛后端 decode token 时**依赖 padding 还原 base64**,
删 `=` 会让 HMAC 验签数据流不一致 → 401 bad token。
### 2. scope 字段:新外壳带了 `:key` 后缀,daoqi 只用 bucket
daoqi QiniuManager.m:207 putPolicy.scope = bucketName(限定 bucket,
允许任意 key)。
新外壳之前传 key 参数后构造 `bucket:key`(限定 key 精确匹配),与
daoqi 行为不一致。带 `:key` 后缀也是七牛合法 scope,但七牛后端
校验更严,且无必要——key 已经在 putFile API 单独传递,token 内不必
重复声明。
## 修复
- base64URLEncode:移除 `=→空` 替换
- uploadToken(key:):key 参数标记为废弃但保留(避免破坏调用方),
putPolicy.scope 改为只用 bucket
- 顺带:JSONSerialization 不再强制 sortedKeys(daoqi 用 options:0)
## 验证
BuildProject 通过 0 错误。真机重试录音上传应不再 401。
2026-06-24 02:09:28 +08:00
..
2026-06-24 01:31:52 +08:00
2026-06-24 02:05:25 +08:00
2026-06-23 21:33:46 +08:00
2026-06-22 22:22:23 +08:00
2026-06-22 22:22:23 +08:00
2026-06-24 02:09:28 +08:00
2026-06-23 23:07:23 +08:00
2026-06-23 17:24:59 +08:00
2026-06-23 08:27:40 +08:00
2026-06-24 01:36:25 +08:00