使用OSS的API接口或SDK时,提示“SignatureDoesNotMatch”签名相关的报错。
SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method
使用OSS的API接口或SDK时,客户端需要携带签名信息与OSS服务端进行校验,若客户端计算的签名与OSS服务端计算的签名不一致,请求不会通过验证。
需要您查看您Endpoint是否正确,不同区域的Bucket对应不同的Endpoint,详情请参见访问域名和数据中心。Endpoint信息格式如endpoint = "http://oss-cn-beijing.aliyuncs.com"
。OSS资源的两种请求方式如下:
[$Schema]://[$Bucket].[$Endpoint]/[$Object]
说明:
- [$Schema]:HTTP或者为HTTPS。
- [$Bucket]:OSS存储空间名称。
- [$Endpoint]:各地域Endpoint详情请参见访问域名和数据中心。
- [$Object] :上传到OSS上的文件的访问路径。
String accessKeyId = "XXX";
String accessKeySecret = "XXX";
String endpoint = "oss-cn-XXX.aliyuncs.com";
OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);
使用部分旧版本的SDK可能会出现“SignatureDoesNotMatch”的问题,如果您使用的是旧版本SDK,请统一使用最新的SDK版本,官网对应的SDK链接有最新版本信息,获取地址请参见对象存储OSS提供的主流语言SDK。
如果签名是您自己构造的API,建议您使用OSS提供的SDK,详请请参见授权访问。或者您检查下自身计算签名的算法逻辑,构造签名算法请参见在Header中包含签名。