API 文档
Syscloud犀思云 API 会对每个访问的请求进行身份验证,即每个请求都需要在公共请求参数中包含签名信息(Signature)以验证用户身份。签名信息由用户所执有的安全凭证生成,安全凭证包括 SecretId 和 SecretKey,若用户还没有安全凭证,则需要在官网上自主申请,否则就无法调用云API接口。 在生成API请求中的签名(Signature)时,需要提供账户中的SecretId和SecretKey,本例中假设
SecretId = 'AKIDwf9QRCuyzjDQM2waT6TaS47vTlnYcTYM' SecretKey = 'A8rKdlhOq31kESSChxylKekbDaibGl13'
SecretId:用于标识 API 调用者身份;
SecretKey:用于加密签名字符串和服务器端验证签名字符串的密钥。
注意:API 密钥是构建API请求的重要凭证,使用犀思云 API 可以操作您名下的所有资源,为了您的财产和服务安全,请妥善保存和定期更换密钥,当您更换密钥后,请及时删除旧密钥。
本例中假设用户请求参数串如下:
{ "Action" : "QueryTunnel", "Timestamp" : 1465185768, "tunnelIds.0" : "xxxxxxxx", "limit" : 20, "offset" : 0, "SecretId" : "AKIDwf9QRCuyzjDQM2waT6TaS47vTlnYcTYM" }
{ "Action" : "QueryTunnel", "SecretId" : "AKIDwf9QRCuyzjDQM2waT6TaS47vTlnYcTYM" "Timestamp" : 1465185768, "limit" : 20, "offset" : 0, "tunnelIds.0" : "xxxxxxxx" }
{ "Action" : "QueryTunnel", "SecretId" : "AKIDwf9QRCuyzjDQM2waT6TaS47vTlnYcTYM" "Timestamp" : 1465185768, "limit" : 20, "offset" : 0, "uuid" : "xxxxxxxx" }
注解:如果参数包含空格、中文等需要URL编码
然后将参数名和参数值之间用 “=” 连接,参数和参数之间用“&“号连接,构造的URL请求。如对Action参数,其参数名称为”Action”,参数值为“DescribeTunnel”,因此格式化后就为Action=DescribeTunnel。 最终生成的请求字符串为:
https://api.syscxp.com/?Action=QueryTunnel &SecretId=AKIDwf9QRCuyzjDQM2waT6TaS47vTlnYcTYM &Timestamp=1465185768 &limit=20 &offset=0 &uuid=xxxxxxxx
被签名串的构造规则为: 签名原文字符串 = 所有请求参数拼接(无需HTTP转义)。并在本签名串的结尾拼接API密钥的私钥(SecretKey)。
Action=QueryTunnel&SecretId=AKIDwf9QRCuyzjDQM2waT6TaS47vTlnYcTYM&Timestamp=1465185768&limit=20&offset=0&uuid=xxxxxxxxA8rKdlhOq31kESSChxylKekbDaibGl13
生成被签名串的 SHA1 签名,即是请求参数”Signature”的值。
按照上述算法,本例中,计算出的Signature为 b9064dd0e37b680744ebedd24a90542ed100432c 。
Python 生成签名代码
import hashlib import urlparse import urllib def _verfy_ac(secretKey, params): items=params.items() # 请求参数串 items.sort() # 将参数串排序 params_data = ""; for key, value in items: params_data = params_data + str(key) + "=" + str(value) params_data = params_data + secretKey sign = hashlib.sha1() sign.update(params_data) signature = sign.hexdigest() return signature # 生成的Signature值
PHP 生成签名代码
function _verfy_ac($secretKey, $params) { ksort($params); # 参数串排序 $params_data = ""; foreach($params as $key => $value) { $params_data .= $key; $params_data .= "=" $params_data .= $value; } $params_data .= $secretKey; return sha1($params_data); # 生成的Signature值 }
将签名参数附在原有请求串的最后面。最终的HTTP请求串为(为了查看方便,我们人为地将参数之间用回车分隔开)
Action=QueryTunnel &secretId=AKIDwf9QRCuyzjDQM2waT6TaS47vTlnYcTYM &Timestamp=1465185768 &limit=20 &offset=0 &uuid=xxxxxxxx &Signature=b9064dd0e37b680744ebedd24a90542ed100432c
完整的请求URL为(为了方便,我们人为地将参数之间用回车分隔开)
https://api.syscxp.com/?Action=QueryTunnel &secretId=AKIDwf9QRCuyzjDQM2waT6TaS47vTlnYcTYM &Timestamp=1465185768 &limit=20 &offset=0 &uuid=xxxxxxxx &Signature=b9064dd0e37b680744ebedd24a90542ed100432c