更新时间:2025-06-20 GMT+08:00
        
          
          
        
      
      
      
      
      
      
      
      
  
      
      
      
        
签名不匹配(SignatureDoesNotMatch)如何处理
问题现象
调用OBS API报如下错误:
状态码:403 Forbidden
错误码:SignatureDoesNotMatch
错误信息:The request signature we calculated does not match the signature you provided. Check your key and signing method.
问题原因
请求中携带的签名与系统计算得到的签名不一致。
解决方法
- 检查AK、SK
    
    
请确保AK、SK输入正确,成对匹配,且与请求所用AK、SK保持一致。
 - 检查HTTP-Verb
    
    
签名所用HTTP-Verb与请求所用HTTP-Verb保持一致。
 - 检查Date/Expires
    
    
- Header中携带签名:检查签名所用Date与请求头域所带Date是否一致。
 - URL中携带签名:检查签名所用Expires与请求URL中的Expires参数是否一致。
 
 - 检查头域
    
    
检查Content-MD5、Content-Type、Canonicalized Headers,如果计算签名时有包含在内,发送请求时也必须带上对应的头域。
 
     如果直接在浏览器中使用携带签名的URL访问OBS资源,因为这种方式不能携带头域参数,故在计算签名时也不能携带此类头域。
 - 检查Canonicalized Resource
    
    
Canonicalized Resource表示请求访问的obs资源,请严格按照API文档中Canonicalized Resource参数的规范设置。详情请参见《对象存储接口参考》的“Header中携带签名”或“URL中携带签名”章节。
 - 检查StringToSign
    
    
StringToSign的构造规则为:
- Header中携带签名:
      
HTTP-Verb + "\n" + Content-MD5 + "\n" + Content-Type + "\n" + Date + "\n" + CanonicalizedHeaders + CanonicalizedResource
 - URL中携带签名:
      
HTTP-Verb + "\n" + Content-MD5 + "\n" + Content-Type + "\n" + Expires + "\n" + CanonicalizedHeaders + CanonicalizedResource
 
 
     值为空的参数处直接换行。
 - Header中携带签名:
      
 - 检查签名算法
    
    
签名的计算方法:
- 构造请求字符串(StringToSign);
 - 对第一步的结果进行UTF-8编码;
 - 使用SK对第二步的结果进行HMAC-SHA1签名计算;
 - 对第三步的结果进行Base64编码,header中携带的签名到此得到最终的签名;
 - URL中携带的签名还需要对第4步的结果进行URL编码才能得到最终的签名。
 
 
   父主题: API和SDK等开发者相关