开发者社区> 问答> 正文

Kubernetes API 参考  集群 API 调用方式  签名机制



签名机制说明


Access Key ID 和 Access Key Secret 由阿里云官方颁发给访问者(可以通过阿里云官方网站申请和管理),其中 Access Key ID 用于标识访问者的身份;Access Key Secret 是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密,只有阿里云和用户知道。
容器服务会对每个访问的请求进行验证,每个向容器服务提交的请求,都需要在请求中包含签名(Signature)信息。容器服务通过使用 Access Key ID 和 Access Key Secret 进行对称加密的方法来验证请求的发送者身份。如果计算出来的验证码和提供的一样即认为该请求是有效的;否则,容器服务将拒绝处理这次请求,并返回 HTTP 403 错误。
用户可以在 HTTP 请求中增加授权(Authorization)的 Head 来包含签名信息,表明这个消息已被授权。
容器服务要求将签名包含在 HTTP Header 中,格式为 Authorization: acs [Access Key Id]:[Signature]。
Signature 的计算方法如下:Signature = base64(hmac-sha1(VERB + "\n"+ ACCEPT + "\n" ++ Content-MD5 + "\n"+ Content-Type + "\n"+ Date + "\n"+ CanonicalizedHeaders + "\n"+ CanonicalizedResource))

  • VERB 表示 HTTP 的 Method。比如示例中的 PUT。
  • Accept 客户端需要的返回值类型,支持 application/json 和 application/xml。
  • Content-MD5 表示请求内容数据的 MD5 值。
  • Content-Type 表示请求内容的类型。
  • Date 表示此次操作的时间,不能为空,目前只支持 GMT 格式。如果请求时间与 CAS 服务器时间相差超过 1 5分钟,CAS 会判定此请求不合法,并返回 400 错误。错误信息及错误码详见本文档第 5 部分。比如示例中的 Thu, 17 Mar 2012 18:49:58 GMT。
  • CanonicalizedHeaders 表示 HTTP 中以 x-acs- 开始的字段组合。
  • CanonicalizedResource 表示 HTTP 所请求资源的 URI (统一资源标识符)。比如示例中的 /clusters?name=my-clusters&resource=new。



  1. 将所有以 x-acs- 为前缀的 HTTP 请求头的名字转换成小写字母。比如将 X-ACS-Meta-Name: TaoBao 转换为 x-acs-meta-name: TaoBao。阿里云规范请求头的名字是大小写不敏感的,建议全部使用小写。
  2. 如果一个公共请求头的值部分过长,则需要处理其中的 \t、\n、\r、\f分隔符,将其替换为英文半角的空格。
  3. 将上一步得到的所有 HTTP 阿里云规范头按照字典序进行升序排列。
  4. 删除请求头和内容之间分隔符两端出现的任何空格。比如将 x-acs-meta-name: TaoBao,Alipay 转换为 x-acs-meta-name:TaoBao,Alipay。
  5. 将所有的头和内容用 \n 分隔符分隔拼成最后的 CanonicalizedHeaders。




说明
CanonicalizedResource 的格式规范: CanonicalizedResource 表示客户想要访问资源的规范描述,需要将子资源和 qurey 一同按照字典序,从小到大排列并以 & 为分隔符生成子资源字符串(? 后的所有参数)。
http://cs.aliyuncs.com/clusters?name=my-clusters&resource=new
CanonicalizedResource 应该为:


/clusters?name=my-clusters&resource=new




签名示例


示例概述您可以通过该示例,了解加签的步骤。
示例使用的 accessKeyId 和 accessKeySecret 分别为 access_key_id 和 access_key_secret。推荐您使用自己的 OpenAPI 调用程序,来计算下面这个示例的加签串,您自己的加签结果和示例结果。请求的示例如下:POST http: //cs.aliyuncs.com/clusters?param1=value1&param2=value2 HTTP/1.1Accept- Encoding: identityContent- Length: 210Content- MD5: 6U4ALMkKSj0PYbeQSHqgmA==x-acs- version: 2015 -12 -15 Accept: application/jsonUser- Agent: cs-sdk-python /0.0.1 (Darwin/ 15.2 .0/x86_64; 2.7 .10)x-acs-signature- nonce: fbf6909a -93a5 -45d3 -8b1c -3e03a7916799x-acs-signature- version: 1.0 Date: Wed, 16 Dec 2015 12: 20: 18 GMTx-acs-signature- method: HMAC-SHA1Content- Type: application/json;charset=utf -8X-Acs-Region- Id: cn-beijing Authorization: acs access_key_id:/ZmVlMDNkNDA1ZTQyMWViYWY1MTRhZGVjODgxMDM4YzRiMzEzNTg0ZA=={ "password": "Just$test", "instance_type": "ecs.m2.medium", "name": "my-test-cluster-97082734", "size": 1, "network_mode": "vpc", "data_disk_category": "cloud", "data_disk_size": 10, "ecs_image_id": "m-253llee3l"}
请求构造过程计算 Content-Length 和 Content-MD5
Content-Length: body 内容的长度。[tr=transparent][url=http://g.alicdn.com/aliyun-icms/assets/icms-main/images/note.png][/url]说明[tr=transparent]第一行行尾有一个 \n 的换行符。/clusters?param 1=value 1&param 2=value 2
计算 Signature组装 SignatureString。示例中的加签字符串的长度为 307。除最后一行外,每一行行尾均有一个\n的换行符。POSTapplication/json 6U4ALMkKSj0PYbeQSHqgmA==application/json;charset=utf- 8Wed, 16 Dec 2015 12: 20: 18 GMTx-acs-region-id:cn-beijingx-acs-signature-method:HMAC-SHA1x-acs-signature-nonce:fbf6909a- 93a5- 45d3- 8b1c- 3e03a7916799x-acs-signature-version: 1.0x-acs-version: 2015- 12- 15/clusters?param1=value1&param2=value2
计算 Signature # 使用 accessKeySecret 来对加签字符串进行加密,其中示例使用的 accessKeySecret 是 access_key_secret。hmac-sha1(SignatureString): fee03d405e421ebaf514adec881038c4b313584d # 类似于 Content-MD5 的计算方式,将得到的加密串转化成字节数组。 # 将得到的字符数组做一个 base64 转换。得到最后的签名串。base64(bytes(hmac-sha1(SignatureString))): ZmVlMDNkNDA1ZTQyMWViYWY1MTRhZGVjODgxMDM4YzRiMzEzNTg0ZA==Signature: ZmVlMDNkNDA1ZTQyMWViYWY1MTRhZGVjODgxMDM4YzRiMzEzNTg0ZA==
完成经过以上的处理,添加一些其他头部信息,最终构成的 HTTP 请求如下所示。POST http: //cs.aliyuncs.com/clusters?param1=value1&param2=value2 HTTP/1.1Accept- Encoding: identityContent- Length: 210Content- MD5: 6U4ALMkKSj0PYbeQSHqgmA==x-acs- version: 2015 -12 -15 Accept: application/jsonUser- Agent: cs-sdk-python /0.0.1 (Darwin/ 15.2 .0/x86_64; 2.7 .10)x-acs-signature- nonce: fbf6909a -93a5 -45d3 -8b1c -3e03a7916799x-acs-signature- version: 1.0 Date: Wed, 16 Dec 2015 12: 20: 18 GMTx-acs-signature- method: HMAC-SHA1Content- Type: application/json;charset=utf -8X-Acs-Region- Id: cn-beijing Authorization: acs access_key_id:/ZmVlMDNkNDA1ZTQyMWViYWY1MTRhZGVjODgxMDM4YzRiMzEzNTg0ZA=={ "password": "Just$test", "instance_type": "ecs.m2.medium", "name": "my-test-cluster-97082734", "size": 1, "network_mode": "vpc"[backcolor=transparent] ,[backcolor=transparent] "data_disk_category"[backcolor=transparent] : [backcolor=transparent] "cloud"[backcolor=transparent] ,[backcolor=transparent] "data_disk_size"[backcolor=transparent] : [backcolor=transparent] 10[backcolor=transparent] ,[backcolor=transparent] "ecs_image_id"[backcolor=transparent] : [backcolor=transparent] "m-253llee3l"[backcolor=transparent] }

展开
收起
青蛙跳 2018-08-31 22:48:22 1308 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
Spring Boot2.0实战Redis分布式缓存 立即下载
CUDA MATH API 立即下载
API PLAYBOOK 立即下载