为保证API的安全调用,在调用API时阿里云会对每个API请求通过签名(Signature)进行身份验证。无论使用HTTP还是HTTPS协议提交请求,都需要在请求中包含签名信息。本文指导您如何进行签名处理。
- 步骤一:构造规范化请求头
- 步骤二:构造规范化资源
- 步骤三:构造待签名字符串
- 步骤四:计算签名
- 步骤五:将签名添加到请求中
步骤一:构造规范化请求头
阿里云规范化请求头(CanonicalizedHeaders)是非标准HTTP头部信息。是指请求中出现的以x-acs-
为前缀的参数信息,构造方法如下:
- 将所有以
x-acs-
为前缀的HTTP请求头的名称转换成小写字母。如X-acs-Meta-Name: TaoBao
转换成x-acs-meta-name: TaoBao
。阿里云规范请求头的名称大小写不敏感,建议全小写。 - 如果一个公共请求头的值过长,则需要处理其中的
、
\r
、\f
分隔符,将其替换成英文半角的空格。 - 将上一步得到的所有HTTP阿里云规范头按照字典顺序进行升序排列。
- 删除请求头的名称和值之间的分隔符两端出现的任何空格。例如
x-acs-oss-meta-name : TaoBao,Alipay
转换成x-acs-oss-meta-name:TaoBao,Alipay
。 - 在每一个请求头后添加一个
分隔符(包括最后一个请求头),然后将所有请求头拼接在一起即获得CanonicalizedHeaders。
步骤二:构造规范化资源
规范化资源(CanonicalizedResource) 表示您想要访问资源的规范描述,具体构造方式如下:
- 将请求的查询字符串(queryString)中的参数按照参数名称的字典序重新排序,并以
&
分隔符连接生成已排序查询字符串。如果本次请求没有携带查询字符串,则跳过此步骤。
- 将请求资源路径(指URL中host与查询字符串之间的部分,包含host之后的
/
但不包含查询字符串前的?
)与已排序查询字符串以?
拼接,得到规范化资源。当查询字符串不存在时,直接用请求资源路径作为规范化资源。
示例
原始请求URL:
http://demo-product.aliyuncs.com/instances?status=ONLINE&group=test_group
规范化资源:
/instances?group=test_group&status=ONLINE
步骤三:构造待签名字符串
按照以下伪代码构造待签名字符串(StringToSign):
StringToSign =
HTTP-Verb + "
" +
Accept + "
" +
Content-MD5 + "
" +
Content-Type + "
" +
Date + "
" +
CanonicalizedHeaders +
CanonicalizedResource
参数 | 描述 |
HTTP-Verb | 大写的HTTP方法名,例如POST、GET。 |
Accept | Accept请求头的值,当请求头不存在时,使用空字符串代替。 |
Content-MD5 | Content-MD5请求头的值,当请求头不存在时,使用空字符串代替。 |
Content-Type | Content-Type请求头的值,当请求头不存在时,使用空字符串代替。 |
Date | Date请求头的值。 |
CanonicalizedHeaders | 步骤一:构造规范化请求头中获得的规范化请求头。 |
CanonicalizedResource | 步骤二:构造规范化资源中获得的规范化资源。 |
步骤四:计算签名
根据RFC2104的定义,按照HMAC-SHA1算法对上一步生成的待签名字符串进行签名计算,并以Base64编码规则将计算结果编码成字符串,即得到最终的签名值(Signature)。
Signature = Base64( HMAC-SHA1( SigningKey, StringToSign ) )
重要 计算签名时使用的SigningKey值就是您的AccessKey Secret。更多信息,请参见创建AccessKey。
步骤五:将签名添加到请求中
计算出签名结果Signature后,按照以下规则拼接字符串,并将结果作为Authorization请求头的值。
Authorization = "acs " + AccessKeyId + ":" + Signature
相关文档
- 公共请求和返回结果
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/171531.html