使用OSS的API接口或SDK时提示“SignatureDoesNotMatch”签名相关的报错

问题描述

使用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服务端计算的签名不一致,请求不会通过验证。

解决方案

检查AK、SK准确性

  1. 您可以通过ossbrowser工具校验您的AK和SK是否正确,ossbrowser工具使用方法请参见快速使用ossbrowser
  2. 若使用ossbrowser也无法打开,说明AK和SK不正确,请参见创建AccessKey,创建新的AK和SK。

检查Endpoint信息准确性

需要您查看您Endpoint是否正确,不同区域的Bucket对应不同的Endpoint,详情请参见访问域名和数据中心。Endpoint信息格式如endpoint = "http://oss-cn-beijing.aliyuncs.com"。OSS资源的两种请求方式如下:

  • 若以URL的形式来请求OSS的资源,OSS的URL构成如下。
    [$Schema]://[$Bucket].[$Endpoint]/[$Object]
    说明
    • [$Schema]:HTTP或者为HTTPS。
    • [$Bucket]:OSS存储空间名称。
    • [$Endpoint]:各地域Endpoint详情请参见访问域名和数据中心
    • [$Object] :上传到OSS上的文件的访问路径。
  • 若以SDK的形式来请求OSS的资源,如下所示。
    String accessKeyId = "XXX";
    String accessKeySecret = "XXX";
    String endpoint = "oss-cn-XXX.aliyuncs.com";
    OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);

检查SDK的版本

使用部分旧版本的SDK可能会出现“SignatureDoesNotMatch”的问题,如果您使用的是旧版本SDK,请统一使用最新的SDK版本,官网对应的SDK链接有最新版本信息,获取地址请参见对象存储OSS提供的主流语言SDK

检查您构造的API

如果签名是您自己构造的API,建议您使用OSS提供的SDK,详情请参见授权访问。或者您检查下自身计算签名的算法逻辑,构造签名算法请参见在Header中包含签名

相关文档

适用于

  • 对象存储OSS