调用客户端签名上传图片到Cloudinary报错无效签名如何解决
问题根因
你遇到的签名错误核心是待签名参数与Cloudinary服务端校验规则不匹配,错误提示中已经明确给出服务端用来校验的待签名字符串仅为timestamp=1631318071,但你服务端计算签名时加入了多余参数:
- 待签名字典加入了不需要参与签名的参数:Cloudinary签名规则仅要求传入除
file、api_key、signature之外的所有上传参数,你当前把api_key、api_secret、cloud_name都加入了待签名集合,直接导致签名结果错误。 - 手动将
api_secret加入待签名集合:Cloudinary官方C# SDK的SignParameters方法会自动在待签名字符串末尾拼接API Secret,不需要手动把api_secret放入待签名字典。
修复后的服务端代码
DateTime foo = DateTime.Now; long timeStamp = ((DateTimeOffset)foo).ToUnixTimeSeconds(); // 仅加入需要签名的上传参数,无需加api_key、api_secret、cloud_name var p = new Dictionary<string, object>(); p.Add("timestamp", timeStamp); // 若后续新增其他上传参数(如folder、public_id等),需同步加入此字典参与签名 var signature = _cloudinary.Api.SignParameters(p); return Ok(new { cloudUploadUrl = _cloudUploadUrl, cloudName = _cloudinaryConfig.Value.CloudName, cloudApiKey = _cloudinaryConfig.Value.ApiKey, cloudSignature = signature, cloudTimeStamp = timeStamp });
补充说明
你的Angular客户端代码逻辑不需要修改,参数传递符合要求。如果后续上传时新增了其他自定义参数,需要同步将这些参数加入服务端的待签名字典,否则仍会触发签名错误。
内容的提问来源于stack exchange,提问作者chuckd
相关产品推荐
相关产品推荐

