# 签名方法

本节描述了请求端签名过程。标注平台 API 会对每个访问请求进行身份验证,即每个请求都需要中包含公共请求参数信息以验证请求者身份。

# 获取安全凭证

标注平台的安全凭证包括 SecretId 和 SecretKey。请与标注平台超级管理员联系获取。

●  SecretId:用于标识 API 调用者身份,可以简单类比为用户名。具有全局唯一性。
●  SecretKey:用于验证 API 调用者的身份,可以简单类比为密码。
●  用户必须严格保管安全凭证,避免泄露。

# 生成签名串

# 公共参数约定

约定请求时会携带 SecretId、Timestamp 和 Signature 作为参数并放入 HTTP URL 中,参数含义详见公共参数。

# 请求参数处理

●  GET(or DELETE):取出所有的参数,并根据 key 进行字符排序,拼装成如下格式。参数包含公共参数和接口参数。
●  POST(or PATCH):如果 Content-Type 是 application/json,则将整个请求体 json 转换成字符串后拼接,这个时候的拼接串有两部分构成:① 包含了公共参数的URL,② json_body 的字符串。
注:GET请求,或Content-Type 为 application/x-www-form-urlencoded 的POST请求,请求URL拼装所有参数。Content-Type 为 multipart/form-data 时,post请求URL拼接公共参数和除了file以外的所有参数。

GET(or DELETE):
strToSign = uri + "?" + key1=value1&key2=value2&key3=value3
POST(or PATCH):
strToSign = uri + "?" + key1=value1&key2=value2&key3=value3 + (json_body).toString

# 计算签名

通过HmacSHA256加密算法,传入 SecretKEY 计算签名,将二进制值转换为十六进制,并以小写的形式将签名结果存储到signature里。
伪代码:

signatrue = LowerCase(HmacSHA256(SecretKEY, strToSign))

# 组装HTTP请求

将 Signature=signatrue 添加到 HTTP URL 中进行请求。