本文介绍了调用内容检测API的签名机制。

说明 建议您直接使用内容安全SDK,SDK中已经封装了签名过程,无需您再编写签名代码。关于SDK的详细介绍,请参见 Java SDKPython SDKPHP SDK

HMAC-SHA1签名流程(默认)

  1. 序列化请求头。
    按照以下方式,将所有以 x-acs-开头的HTTP头拼接成字符串:
    1. 抽取所有以x-acs-开头的HTTP头。
    2. 对抽取出来的头按字典顺序排序。
    3. 对每个HTTP头,按"HTTP头名称" + ":" + "HTTP头值" + "\n"拼接。
  2. 序列化URI和query参数。
    按照 uri + "?clientInfo=" + "ClientInfo的JSON字符串"方式拼接URI和 clientInfo参数。
    说明 此处不需要URL编码。
  3. 构建完整的待签名字符串。
    按照以下方式,构建完整的待签名字符串:
    "POST\napplication/json\n" + 
    "HTTP头Content-MD5的值" + "\n" + 
    "application/json" + "\n" + 
    "HTTP头Date的值" + "\n" + 
    "序列化请求头" + 
    "序列化uri和query参数"
    以下是一个完整的调用图片同步检测接口的待签名字符串示例:
    POST
    application/json
    C+5Y0crpO4sYgC2DNjycug==
    application/json
    Tue, 14 Mar 2017 06:29:50 GMT
    x-acs-signature-method:HMAC-SHA1
    x-acs-signature-nonce:339497c2-d91f-4c17-a0a3-1192ee9e2202
    x-acs-signature-version:1.0
    x-acs-version:2018-05-09
    /green/image/scan?clientInfo={"ip":"127.xxx.xxx.2","userId":"12023xxxx","userNick":"Mike","userType":"others"}
  4. 生成签名。
    1. 对步骤3中得到的字符串,使用AccessKey Secret进行HMAC-SHA1算法加密得到bytes数组。
      说明 这一步不要对bytes数组做任何其他处理。
    2. 对HMAC-SHA1加密得到的bytes数组进行base64编码。
    3. 将base64编码后的结果放到HTTP头Authorization中的signature"acs" + " " + AccessKeyId + ":" + signature
      说明 acsAccessKeyId中间有空格。

HMAC-SM3签名流程

  1. 序列化请求头。
    按照以下方式,将所有以 x-acs-开头的HTTP头拼接成字符串:
    1. 抽取所有以x-acs-开头的HTTP头。
    2. 对抽取出来的头按字典顺序排序。
    3. 对每个HTTP头,按"HTTP头名称" + ":" + "HTTP头值" + "\n"拼接。
  2. 序列化URI和query参数。
    按照 uri + "?clientInfo=" + "ClientInfo的JSON字符串"方式拼接URI和 clientInfo参数。
    说明 此处不需要URL编码。
  3. 构建完整的待签名字符串。
    按照以下方式,构建完整的待签名字符串:
    "POST" + "\n" +
    "application/json" + "\n" +
    "HTTP头Date的值" + "\n" +
    "序列化请求头" +
    "序列化uri和query参数"
    以下是一个完整的调用图片同步检测接口的待签名字符串示例:
    POST
    application/json
    Tue, 14 Mar 2017 06:29:50 GMT
    x-acs-content-sm3:690c6c542ac53eaa1e2ad724f34d60e689d11db88a2d89469be1fdb2f20fc35c
    x-acs-signature-method:HMAC-SM3
    x-acs-signature-nonce:339497c2-d91f-4c17-a0a3-1192ee9e2202
    x-acs-signature-version:1.0
    x-acs-version:2018-05-09
    /green/image/scan?clientInfo={"ip":"127.xxx.xxx.2","userId":"12023xxxx","userNick":"Mike","userType":"others"}
  4. 生成签名。
    1. 对步骤3中得到的字符串,使用AccessKey Secret进行HMAC-SM3算法加密得到bytes数组。
      说明 这一步不要对bytes数组做任何其他处理。
    2. 对HMAC-SM3加密得到的bytes数组进行base64编码。
    3. 将base64编码后的结果放到HTTP头Authorization中的signature"acs" + " " + AccessKeyId + ":" + signature
      说明 acsAccessKeyId中间有空格。