STS API

签名方法

1. 规范化请求参数(CanonicalizedQueryString)。

  • 将公共参数(除signature外)和自定义参数按字典序排序。
  • 使用=将参数名和参数值连接,参数间使用&连接。

2. 根据如下规则拼接出请求字符串:

HTTPMETHOD + ? + CanonicalizedQueryString

其中,HTTPMETHOD表示请求方法,如GET,POST。CanonicalizedQueryString表示第一步中生成的规范化请求参数。

3. 将请求字符串使用urlEncode编码生成待签名的字符串(stringToSign)。

需要转义的字符请参考:rfc3986。可使用一般语言自带的URL编码库(如Java中的java.net.URLEncoder)对stringToSign进行签名。

4. 生成签名字符串。

根据使用的签名算法(目前仅支持HMAC-SHA256算法)将第三步中的stringToSign进行签名计算,使用的签名KEY就是和AccessKey对应的SecretKey, 然后将生成的签名串使用十六进制(Hex编码)进行编码,最终得到签名串。

签名示例(以AssumeRole为例子)

1. 未签名的AssumeRole请求(假设AccessKey为testAK):

https://sts.163yun.com/v1/assumeRole?acceptType=json&accessKey=testAK&duration=3600&region=cn-east-1&roleNrn=ncs:sam::286516215260643328:role/stsRole&signatureAlgorithm=HMAC-SHA256&signatureNonce=b2b48500-f3e1-4fe8-9fe5-f61b1174ef8b&signatureVersion=1.0&timestamp=2017-08-01T05:55:37Z

2. 计算出待签名的字符串(stringToSign):

GET%3FacceptType%3Djson%26accessKey%3DtestAK%26duration%3D3600%26region%3Dcn-east-1%26roleNrn%3Dncs%3Asam%3A%3A286516215260643328%3Arole%2FstsRole%26signatureAlgorithm%3DHMAC-SHA256%26signatureNonce%3Db2b48500-f3e1-4fe8-9fe5-f61b1174ef8b%26signatureVersion%3D1.0%26timestamp%3D2017-08-01T05%3A55%3A37Z

3. 计算签名(假设SecretKey为testSK):

6fc5035e943121ec8bc60b0f91e6bd1416200344649250a12af08684f0c1296d

4. 将签名后的字符串添加到URL后:

https://sts.163yun.com/v1/assumeRole?acceptType=json&accessKey=testAK&duration=3600&region=cn-east-1&roleNrn=ncs:sam::286516215260643328:role/stsRole&signature=6fc5035e943121ec8bc60b0f91e6bd1416200344649250a12af08684f0c1296d&signatureAlgorithm=HMAC-SHA256&signatureNonce=b2b48500-f3e1-4fe8-9fe5-f61b1174ef8b&signatureVersion=1.0&timestamp=2017-08-01T05:55:37Z