MinIO 预签名上传的认证陷阱
使用 S3 预签名 URL 上传文件时,认证信息只能出现一次;如果客户端配置了全局拦截器,还需要为上传请求单独放行。
预签名 URL 已经把临时凭证、签名和过期时间编码在查询参数中。上传时如果又携带 Authorization 或其他 Token,服务端可能判断请求同时使用了两种认证方式并拒绝它。
curl -X PUT \
-H "Content-Type: image/jpeg" \
--upload-file ./photo.jpg \
"https://storage.example.com/bucket/photo.jpg?X-Amz-Algorithm=..."
需要注意两点:
- 请求方法、
Content-Type和参与签名的请求头必须与生成 URL 时一致。 - 不要让全局网络层自动追加
Authorization。
如果 iOS 客户端使用 Alamofire 的 RequestInterceptor 注入登录 Token,应当为预签名上传建立单独的 Session,或根据目标 Host 和请求类型跳过认证适配。
[!TIP] 遇到
SignatureDoesNotMatch时,优先比较请求方法、路径、Content-Type、系统时间和参与签名的请求头,不要只检查 Access Key。