MinIO上传含特殊字符文件名返回HTTP 403签名不匹配问题咨询
MinIO 403签名不匹配问题原因分析
根因定位
该错误并非MinIO逻辑异常,而是MinIO的S3签名校验逻辑与.NET WebClient默认的URL编码规则对特殊字符的处理不一致,核心触发点是对象名中的+符号:
- .NET WebClient默认编码逻辑中,仅会将空格编码为
+,不会对原生存在于文件名中的+做转义处理(不会转为%2B),因此上传old_me_bold+19(1).jpg时,请求路径中直接携带+字符 - MinIO的签名校验阶段,会将URL路径中的
+解析为空格,而非保留为原字符,导致两端计算签名时使用的对象名字符串不一致
具体校验逻辑偏差
MinIO在实现S3兼容的V2/V4签名校验时,对URL路径的解码规则和S3官方规范存在差异:
S3官方规范明确要求:签名计算时需要严格保留原始资源路径的编码后字符,
+只有出现在Query参数中时才会被解析为空格,出现在URL路径段时需视为普通字符保留
你收到的提示The request signature we calculated does not match the signature you provided. Check your key and signing method就是因为签名计算的原始输入不一致:WebClient端使用原文件名old_me_bold+19(1).jpg计算签名,MinIO端将+替换为空格后用old_me_bold 19(1).jpg计算签名,最终结果不匹配触发403错误。
验证方案
手动将文件名中的+转义为%2B后再发起上传请求,即可正常上传成功,可直接验证该问题的触发原因。
内容的提问来源于stack exchange,提问作者Pepe Marino
相关产品推荐
相关产品推荐

