
# 签名不匹配（SignatureDoesNotMatch）如何处理
#### 问题现象
调用OBS API报如下错误：
状态码：403 Forbidden
错误码：SignatureDoesNotMatch
错误信息：The request signature we calculated does not match the signature you provided. Check your key and signing method.
#### 问题原因
请求中携带的签名与系统计算得到的签名不一致。
#### 解决方法
1. **检查endpoint**
   
   使用OBS SDK时需要检查此项。
   正确的endpoint格式为obs.*regionID* .myhuaweicloud.com，当用户将endpoint错误地填写为桶访问域名（*bucketname* .obs.*regionID*.myhuaweicloud.com），即在endpoint前多加了桶名，也会报签名不匹配错误。
   
   
2. **检查AK、SK**
   
   请确保AK、SK输入正确，成对匹配，且与请求所用AK、SK保持一致。
   
   
3. **检查HTTP-Verb**
   
   签名所用HTTP-Verb与请求所用HTTP-Verb保持一致。
   
   
4. **检查Date/Expires**
   
   - Header中携带签名：检查签名所用Date与请求头域所带Date是否一致。
   
   - URL中携带签名：检查签名所用Expires与请求URL中的Expires参数是否一致。
     ![](https://support.huaweicloud.com/obs_faq/public_sys-resources/note_3.0-zh-cn.png)
     如果使用URL签名计算工具，工具中Expires参数设置的是一个时间段，以秒为单位，比如一小时为3600。工具最终生成的URL中的Expires值为有效期的最后时间点。
     
   
   
   
   
5. **检查头域**
   
   检查Content-MD5、Content-Type、Canonicalized Headers，如果计算签名时有包含在内，发送请求时也必须带上对应的头域。
   ![](https://support.huaweicloud.com/obs_faq/public_sys-resources/note_3.0-zh-cn.png)
   如果直接在浏览器中使用携带签名的URL访问OBS资源，因为这种方式不能携带头域参数，故在计算签名时也不能携带此类头域。
   
   
6. **检查Canonicalized Resource**
   
   Canonicalized Resource表示请求访问的obs资源，请严格按照API文档中Canonicalized Resource参数的规范设置。详情请参见[Header中携带签名](https://support.huaweicloud.com/api-obs/obs_04_0010.html)或[URL中携带签名](https://support.huaweicloud.com/api-obs/obs_04_0011.html)。
   
   
7. **检查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
     ```
     
   
   
   ![](https://support.huaweicloud.com/obs_faq/public_sys-resources/note_3.0-zh-cn.png)
   值为空的参数处直接换行。
   
   
8. **检查签名算法**
   
   签名的计算方法：
   1. 构造请求字符串（StringToSign）;
   
   2. 对第一步的结果进行UTF-8编码；
   
   3. 使用SK对第二步的结果进行HMAC-SHA1签名计算；
   
   4. 对第三步的结果进行Base64编码，header中携带的签名到此得到最终的签名；
   
   5. URL中携带的签名还需要对第4步的结果进行URL编码才能得到最终的签名。
   
   
   
   
9. 签名验证方法请参见[用户签名验证](https://support.huaweicloud.com/api-obs/obs_04_0009.html)。
 
