说明:
- 对于每一次API请求,我们会根据访问中的签名信息验证访问请求者身份。
-
AccessKeyID
和AccessKeySecret
以SaaS入驻主体为单位,一个账号一套。 -
AccessKey
相当于用户密码,AccessKey
用于调用API,而用户密码用于登录管理后台。其中AccessKeyID
是访问者身份,AccessKeySecret
是加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密谨防泄露。
步骤一:构造规范化请求字符串
- 排序参数。排序规则以首字母顺序排序,排序参数包括公共请求参数和接口自定义参数,不包括公共请求参数中的
Signature
参数。
当使用GET方法提交请求时,这些参数就是请求URL中的参数部分,即URL中
?
之后由&
连接的部分。
在对请求的参数做签名时,对于请求参数列表中那些可空的参数,如果选择使用它们,那么这些参数的参数值必须不能为
null
。
没有值的参数无需传递,也无需包含到待签名数据中.
待签名数据应该是参数原始值而不是url encoding之后的值,例如:调用某接口需要对请求参数email进行数字签名,那么待签名数据应该是
email=test@test.com
,而不是email=test%40test.com
- 编码参数。使用UTF-8字符集按照
application/x-www-form-urlencoded
MIME规则编码请求参数和参数取值,编码规则如下:
- 字符A-Z、a-z、0-9以及字符
-
、_
、.
、~
不编码。 - 其它字符编码成
%XY
的格式,其中XY是字符对应ASCII码的16进制。示例:半角双引号("
)对应%22
。 - 扩展的UTF-8字符,编码成
%XY%ZA…
的格式。 - 空格(
- 使用等号(
=
)连接编码后的请求参数和参数取值。 - 使用与号(
&
)连接编码后的请求参数,注意参数排序与步骤1
一致。
现在,您得到了规范化请求字符串(CanonicalizedQueryString
),其结构遵循请求结构。
步骤二:构造签名字符串
- 构造待签名字符串
StringToSign
。
StringToSign=
AccessKeySecret + //我们分配给您的AccessKeySecret。
Timestamp + // 当前时间时间戳,单位为秒。
CanonicalizedQueryString //您的规范化请求字符串。
- 计算待签名字符串
StringToSign
的MD5
值。
Signature = MD5Utils.md5( StringToSign )
- 添加计算后的参数
Signature
到规范化请求字符串URL中。