
# 签名计算工具
OBS提供可视化签名计算工具，帮助您轻松完成签名计算。
表1签名计算工具 
| 签名计算方式      | 签名计算工具获取地址                                                                               |
|:---|:---|
| Header中携带签名 | [可视化签名计算工具](https://noaccident.github.io/obs-sgnature-tools/en-us/header_signature.html) |
| URL中携带签名    | [可视化签名计算工具](https://noaccident.github.io/obs-sgnature-tools/en-us/query_signature.html)  |
   
#### 工具使用步骤
本节介绍如何使用工具计算签名
- [使用工具计算Header中携带的签名]
  1. 进入[可视化签名计算工具](https://noaccident.github.io/obs-sgnature-tools/en-us/header_signature.html)。
  
  2. 填写用户访问密钥ID（AK）和秘密访问密钥（SK）。如何获取请参见[管理访问密钥](https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html)
  
  3. 参照下表填写生成签名需要的参数： 
     表2工具参数说明 
     | **参数名称**              | **参数类型** | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
     |:---|:---|:---|:---|
     | HTTP-Verb             | String   | 必选       | **参数解释** **：** HTTP方法（也称为操作或动词），对REST接口而言，即为http请求操作的VERB，如："PUT"，"GET"，"DELETE"等字符串，您可根据要调用的API选择。 **约束限制：** 不涉及 **取值范围：** - GET：请求服务器返回指定资源，如获取桶列表、下载对象等。  - PUT：请求服务器更新指定资源，如创建桶、上传对象等。  - POST：请求服务器新增资源或执行特殊操作，如初始化上传段任务、合并段等。  - DELETE：请求服务器删除指定资源，如删除对象等。  - HEAD：请求服务器返回指定资源的概要，如获取对象元数据等。  - OPTIONS（暂不支持工具生成签名）：请求服务器检查是否具有某个资源的操作权限，需要桶配置CORS。   **默认取值：** 无，此参数必选。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
     | Content-MD5           | String   | 可选       | **参数解释** **：** 消息体（body体）的MD5摘要字符串。Content-MD5是按照RFC 1864标准计算出的消息体（body体）的128bit MD5值经过base64编码后得到的字符串。填写该值能防止body体被篡改，保护数据的完整性和一致性。 **约束限制：** 不涉及 **取值范围：** 长度大于等于0小于24的字符串。 **默认取值：** 不设置默认为空。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
     | Content-Type          | String   | 可选       | **参数解释** **：** Content-Type用于指定Object的文件类型，例如： text/plain。文件类型决定浏览器将以什么形式、什么编码读取文件。 **约束限制：** 不涉及 **取值范围：** Content-type的常见取值参见[常见的Content-Type类型](https://support.huaweicloud.com/usermanual-obs/obs_03_0324.html)。 **默认取值：** 当请求中不带该头域时，该参数按照空字符串处理，见[表4](https://support.huaweicloud.com/api-obs/obs_04_0010.html#ZH-CN_TOPIC_0000001945406906__table14775325212511)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     | Date                  | String   | 必选       | **参数解释** **：** 请求生成的时间。如果Date与当前服务器的时间相差超过15分钟时，则服务端返回403，认为请求已失效。 **约束限制：** - Date必须为RFC 1123格式的GMT时间。  - 该值来自于Date头域或者x-obs-date头域。当两头域同时存在时，以x-obs-date为准。   **取值范围：** 不涉及 **默认取值：** 该参数必选                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
     | CanonicalizedHeaders  | String   | 可选       | **参数解释** **：** OBS服务自定义的附加头域，即以"x-obs-"作为前缀的头域，如"x-obs-date，x-obs-acl，x-obs-meta-\*"等。每个头域包含头域名称和头域值两部分，如"x-obs-storage-class:STANDARD"中"x-obs-storage-class"是头域名称，"STANDARD"是头域值。 **约束限制：** 1. 头域名称不允许含有非ASCII码或不可识别字符，头域值也不建议使用非ASCII码或不可识别字符。如果一定要使用非ASCII码或不可识别字符，需要客户端自行做编解码处理，可以采用URL编码或者Base64编码，服务端不会做解码处理。  2. 如果头域名称重复，则需要将头域值进行合并，多个头域值以逗号分隔。如：x-obs-meta-name:name1和x-obs-meta-name:name2，合并成x-obs-meta-name:name1,name2。  3. 上传对象和上传段支持携带x-obs-content-sha256头域，该头域值为请求消息体256-bit SHA256值转十六进制值，计算方式为Hex(SHA256Hash(\<payload\>)，服务端会对携带此头域的请求计算其消息体的sha256值做校验（性能会有部分下降，在安全上推荐该算法）。  4. 您无需关注头域名称的大小写转换和字典排序，工具会自动完成。   **取值范围：** 调用API时，从API支持的头域中选取。 **默认取值：** 不设置默认为空。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
     | CanonicalizedResource | String   | 必选       | **参数解释** **：** HTTP请求所指定的OBS资源，结构如下： ``` CanonicalizedResource = "/" + 桶名 +  "/" + 对象名 + "?" + 子资源 ``` 以获取对象（GetObject）接口为例，假设桶名为bucket-test，对象名为object-test，对象版本号为xxx，获取时需要重写Content-Type为text/plain，那么CanonicalizedResource为： ``` /bucket-test/object-test?response-content-type=text/plain&versionId=xxx ``` - 桶名： 如果桶未绑定自定义域名，则直接使用原始桶名。 如果桶绑定了自定义域名，则桶名由自定义域名表示，如"/obs.ccc.com/object"，其中"obs.ccc.com"为桶绑定的自定义域名。 如果API操作不指定桶，例如列举账号下所有桶操作，则桶名字段和对象名字段都不写。如"/"。   - 对象名： 要操作对象的对象名。需要遵循对象的命名规则。   - 子资源（多个子资源需按照字典序从小到大排列，并使用"\&"拼接）： 资源标识：CDNNotifyConfiguration, acl, append, attname, backtosource, cors, customdomain, delete, deletebucket, directcoldaccess, encryption, inventory, length, lifecycle, location, logging, metadata, modify, name, notification, partNumber, policy, position, quota, rename, replication, restore, storageClass, storagePolicy, storageinfo, tagging, torrent, truncate, uploadId, uploads, versionId, versioning, versions, website,x-obs-security-token, object-lock, retention 用于指定响应头域的子资源：response-cache-control, response-content-disposition, response-content-encoding, response-content-language, response-content-type, response-expires 图片处理相关资源标识： x-image-process, x-image-save-bucket, x-image-save-object    **约束限制：** 子资源通常是唯一的，不建议包含多个相同关键字的子资源（例如，key=value1\&key=value2），如果存在这种情况，OBS服务端签名时只会计算第一个子资源且也只有第一个子资源的值会对实际业务产生作用。 **取值范围：** 不涉及。 **默认取值：** 不写默认为"/"。 |
        
     
     
  
  4. 单击"生成Header鉴权签名"。
   
- [使用工具计算URL中携带的签名]
  1. 单击进入[可视化签名计算工具](https://noaccident.github.io/obs-sgnature-tools/en-us/query_signature.html)。
  
  2. 填写用户访问密钥ID（AK）和秘密访问密钥（SK）。如何获取请参见[管理访问密钥](https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html)
  
  3. 参照下表填写生成签名需要的参数： 
     表3工具参数说明 
     | **参数名称**              | **参数类型** | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
     |:---|:---|:---|:---|
     | HTTP-Verb             | String   | 必选       | **参数解释** **：** HTTP方法（也称为操作或动词），对REST接口而言，即为http请求操作的VERB，如："PUT"，"GET"，"DELETE"等字符串，您可根据要调用的API选择。 **约束限制：** 不涉及 **取值范围：** - GET：请求服务器返回指定资源，如获取桶列表、下载对象等。  - PUT：请求服务器更新指定资源，如创建桶、上传对象等。  - POST：请求服务器新增资源或执行特殊操作，如初始化上传段任务、合并段等。  - DELETE：请求服务器删除指定资源，如删除对象等。  - HEAD：请求服务器返回指定资源的概要，如获取对象元数据等。  - OPTIONS（暂不支持工具生成签名）：请求服务器检查是否具有某个资源的操作权限，需要桶配置CORS。   **默认取值：** 无，此参数必选。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
     | Content-MD5           | String   | 可选       | **参数解释** **：** 消息体（body体）的MD5摘要字符串。Content-MD5是按照RFC 1864标准计算出的消息体（body体）的128bit MD5值经过base64编码后得到的字符串。填写该值能防止body体被篡改，保护数据的完整性和一致性。 **约束限制：** 不涉及 **取值范围：** 长度大于等于0小于24的字符串。 **默认取值：** 不设置默认为空。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
     | Content-Type          | String   | 可选       | **参数解释** **：** Content-Type用于指定Object的文件类型，例如： text/plain。文件类型决定浏览器将以什么形式、什么编码读取文件。 **约束限制：** 不涉及 **取值范围：** Content-type的常见取值参见[常见的Content-Type类型](https://support.huaweicloud.com/usermanual-obs/obs_03_0324.html)。 **默认取值：** 当请求中不带该头域时，该参数按照空字符串处理，见[表4](https://support.huaweicloud.com/api-obs/obs_04_0010.html#ZH-CN_TOPIC_0000001945406906__table14775325212511)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
     | Expires               | String   | 必选       | **参数解释：** 签名失效的时间，此处以UNIX时间戳的形式来计量（以1970年1月1日零时为起点往后数秒），超过该时间后，URL签名失效。 **约束限制：** 不涉及 **取值范围：** 当前时间\<Expires\<当前时间+20年。单位：秒。 说明： 为了方便您使用，您只需要在工具中输入签名生效的时长即可，例如希望签名有效期为10分钟，则在工具中填入600，工具会在计算签名时自动加上当前时间生成一个标准UNIX时间戳。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
     | CanonicalizedHeaders  | String   | 可选       | **参数解释** **：** OBS服务自定义的附加头域，即以"x-obs-"作为前缀的头域，如"x-obs-date，x-obs-acl，x-obs-meta-\*"等。每个头域包含头域名称和头域值两部分，如"x-obs-storage-class:STANDARD"中"x-obs-storage-class"是头域名称，"STANDARD"是头域值。 **约束限制：** 1. 头域名称不允许含有非ASCII码或不可识别字符，头域值也不建议使用非ASCII码或不可识别字符。如果一定要使用非ASCII码或不可识别字符，需要客户端自行做编解码处理，可以采用URL编码或者Base64编码，服务端不会做解码处理。  2. 如果头域名称重复，则需要将头域值进行合并，多个头域值以逗号分隔。如：x-obs-meta-name:name1和x-obs-meta-name:name2，合并成x-obs-meta-name:name1,name2。  3. 上传对象和上传段支持携带x-obs-content-sha256头域，该头域值为请求消息体256-bit SHA256值转十六进制值，计算方式为Hex(SHA256Hash(\<payload\>)，服务端会对携带此头域的请求计算其消息体的sha256值做校验（性能会有部分下降，在安全上推荐该算法）。  4. 您无需关注头域名称的大小写转换和字典排序，工具会自动完成。   **取值范围：** 调用API时，从API支持的头域中选取。 **默认取值：** 不设置默认为空。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
     | CanonicalizedResource | String   | 必选       | **参数解释** **：** HTTP请求所指定的OBS资源，结构如下： ``` CanonicalizedResource = "/" + 桶名 +  "/" + 对象名 + "?" + 子资源 ``` 以获取对象（GetObject）接口为例，假设桶名为bucket-test，对象名为object-test，对象版本号为xxx，获取时需要重写Content-Type为text/plain，那么CanonicalizedResource为： ``` /bucket-test/object-test?response-content-type=text/plain&versionId=xxx ``` - 桶名： 如果桶未绑定自定义域名，则直接使用原始桶名。 如果桶绑定了自定义域名，则桶名由自定义域名表示，如"/obs.ccc.com/object"，其中"obs.ccc.com"为桶绑定的自定义域名。 如果API操作不指定桶，例如列举账号下所有桶操作，则桶名字段和对象名字段都不写。如"/"。   - 对象名： 要操作对象的对象名。需要遵循对象的命名规则。   - 子资源（多个子资源需按照字典序从小到大排列，并使用"\&"拼接）： 资源标识：CDNNotifyConfiguration, acl, append, attname, backtosource, cors, customdomain, delete, deletebucket, directcoldaccess, encryption, inventory, length, lifecycle, location, logging, metadata, modify, name, notification, partNumber, policy, position, quota, rename, replication, restore, storageClass, storagePolicy, storageinfo, tagging, torrent, truncate, uploadId, uploads, versionId, versioning, versions, website,x-obs-security-token, object-lock, retention 用于指定响应头域的子资源：response-cache-control, response-content-disposition, response-content-encoding, response-content-language, response-content-type, response-expires 图片处理相关资源标识： x-image-process, x-image-save-bucket, x-image-save-object    **约束限制：** 子资源通常是唯一的，不建议包含多个相同关键字的子资源（例如，key=value1\&key=value2），如果存在这种情况，OBS服务端签名时只会计算第一个子资源且也只有第一个子资源的值会对实际业务产生作用。 **取值范围：** 不涉及。 **默认取值：** 不写默认为"/"。 |
        
     
     
  
  4. 单击"生成Query鉴权签名"。
   
#### 签名不匹配报错处理
如果调用OBS API报如下错误：
状态码：403 Forbidden
错误码：SignatureDoesNotMatch
错误信息：The request signature we calculated does not match the signature you provided. Check your key and signing method.
请参考以下案例进行排查处理：[签名不匹配（SignatureDoesNotMatch）如何处理](https://support.huaweicloud.com/obs_faq/obs_faq_0173.html)
