请求签名

适用范围

文本审核、图片审核、音频审核、视频审核、网页审核等 HTTP API 均使用同一套请求签名规则。

当用户请求 API 时,需要使用 appIdsecretKey 对请求做签名。API 收到带签名信息的请求后,会使用相同算法验证签名;如果签名不一致,API 将返回 401。

appIdsecretKey 可在 <控制台-服务配置> 中获取。

请求 Header

Header 示例值 是否必需 描述
X-AppId 1000 必需 项目的唯一标识
X-TimeStamp 2024-01-31T07:59:03Z 必需 请求发起时的 UTC 时间,格式为 yyyy-MM-dd'T'HH:mm:ss'Z'
Authorization ***** 必需 请求签名

签名计算方法

  1. 构造规范化的请求字符串(Canonicalized Query String)。

对于 JSON 请求,将请求体 JSON 字符串以 UTF-8 字符编码做 SHA256 编码后转换为 16 进制字符串(注意不是 Base64)。

CanonicalizedQueryString = hex(sha256(jsonBody))
  1. 构造被签名字符串 StringToSign。其中 \n 代表 ASCII 里的换行符。
StringToSign = HTTPMethod + "\n" +
               HostHeaderInLowercase + "\n" +
               HTTPRequestURI + "\n" +
               CanonicalizedQueryString + "\n" +
               "X-AppId:" + SAME_APPID_IN_HEADER + "\n" +
               "X-TimeStamp:" + SAME_TIMESTAMP_IN_HEADER

HTTPRequestURI 是请求 URI 的绝对路径,不包含请求参数。如果 HTTPRequestURI 为空,也要保留一个正斜杠(/)。

  1. 使用 HMAC-SHA256 计算签名。StringToSign 作为签名字符串,secretKey 作为密钥,SHA256 作为哈希算法。

有关 HMAC 的更多信息,请参阅 https://tools.ietf.org/html/rfc2104

  1. 将 HMAC-SHA256 的计算结果转换为 Base64 字符串。

  2. 将 Base64 字符串放入 HTTP 请求 Header 的 Authorization

签名示例

下面以网页审核提交接口为例。

请求信息:

HTTPMethod=POST
Host=msafe.ilivedata.com
HTTPRequestURI=/api/v1/media/web/submit
X-AppId=1000
X-TimeStamp=2024-01-31T07:59:03Z
secretKey=****

请求体:

{"url":"https://example.com/page.html","strategyId":"DEFAULT"}

生成 CanonicalizedQueryString

e87c44a05094b0129745a6ea138b11d62ff46fa3790cf7cd5ef0f4125e5f865f

生成 StringToSign

POST
msafe.ilivedata.com
/api/v1/media/web/submit
e87c44a05094b0129745a6ea138b11d62ff46fa3790cf7cd5ef0f4125e5f865f
X-AppId:1000
X-TimeStamp:2024-01-31T07:59:03Z

HMAC 计算得到的签名:

*****

设置请求 Header:

Authorization: *****