标签:
CloudStack API调用
<1>制作API请求
所有的CloudStack API请求是以HTTP GET / POST有一个关联的命令和任何参数的形式提交的。无论在HTTP或HTTPS中请求都由一下组成:
l CloudStack API URL:这是Web服务的API入口点(例如,http://域名:8080/client/api)。
l 命令(Command):Web服务命令要执行,如启动虚拟机或创建一个磁盘卷。
l 参数(Parameters):任何额外的要求或命令的可选参数。
一个API GET请求示例如下:
http。//localhost。8080/client/api?command=deployVirtualMachine&serviceOfferingId=1&diskOfferingId=1&templateId=2&zoneId=4&apiKey=miVr6X7u6bjB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ&signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D
或如下一个更可读的示例:
1. http。//localhost。8080/client/api?command=deployVirtualMachine
3. &serviceOfferingId=1
4. &diskOfferingId=1
5. &templateId=2
6. &zoneId=4
7.&apiKey=miVr6X7u6bN_sdahOBpjNejPgEsT35eXqjB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ
8. &signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D%3D
第1行是的CloudStackAPI URL。这是你希望进行交互的云实例。
第2行是指你要执行的命令。在我们的例子中,我们试图部署一个新的虚拟机。通过前面的一个(?)将要执行的命令从CloudStackAPI URL中分离出来。
第3-6行是此命令的参数。要查看命令和请求参数,请参阅在CloudStack API文档的相应部分。每个参数字段-值对(field =value)通过前面的字符(&)分隔开。
第7行是可以唯一标识帐户的APIkey。请参阅第9页上的签名API请求。
第8行是创建的签名哈希来验证用户帐户执行的API命令。
请参阅第9页上的签名API请求。
2启用API调用过期
您可以设定的到期时间戳记API调用以防止重放攻击通过非安全通道,如HTTP。服务器跟踪您所指定的到期时间戳记,并拒绝所有后续的API请求,在此有效期后。
要启用此功能,将以下参数添加到API请求:
•signatureVersion = 3:如果signatureVersion参数丢失或不等于3,在到期的API请求参数将被忽略。
•expires=YYYY-MM-DDThh:mm:ssZ:指定在哪些包含在请求中的签名已过期的日期和时间。时间戳表示YYYY-MM-DDTHH:MM:SSZ格式,ISO 8601标准中规定的。例子如下:expires=2011-10-10T12:00:00+0530。
下面给出了一个到期API请求示例:
http。//<IPAddress>。8080/client/api?
command=listZones&signatureVersion=3&expires=2011-10-10T12:00:00+0530&apiKey=miVr6X7u6bN_sdahOBpjNejPgEsT35eXq-jB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ&signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D%3D
3 API 请求签名
无论你使用HTTP还是使用HTTPS访问CloudStack API,它仍必须签署CloudStack可以验证调用者的身份验证和授权来执行命令。
请确保你有由CloudStack管理员为您的帐户提供的API Key和Secret Key,然后再进行签名的过程。为了显示如何注册请求,我们将再次使用前面的例子。
http。//localhost。8080/client/api?command=deployVirtualMachine&serviceOfferingId=1&diskOfferingId=1&templateId=2&zoneId=4&apiKey=miVr6X7u6bjB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ&signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D
每个API请求的格式:基本URL(Base URL)+ API路径(API Path)+命令字符串(CommandString)+签名(Signature)。
为了生成签名(可以用以下步骤实现)。
1.在命令字符串的每个字段的值对(由一个“&”隔开),URL解析每个值以便它可以通过HTTP GET被安全地发送。
确保所有的空格被编码为“%20”,而不是“+”。
2.整个命令字符串(Command String)小写字母顺序并通过字段对每个字段- 值排序。这一步的结果如下:
apikey=mivr6x7u6bn_sdahobpjnejpgest35exqjb8cg20yi3yaxxcgpyuairmfi_ejtvwz0nukkjbpmy3y2bcikwfq&command=deployvirtualmachine&diskofferingid=1&se
3.通过验证用户的Secret Key以排序的命令字符串(Command String)并通过HMAC SHA-1散列算法(大多数编程语言提供了一个实用的方法来做到这一点)运行它。Base64编码所产生的UTF-8字节数组可安全地通过HTTP传输。经Base64编码后产生的最后字符串应该是:
“Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D”。
通过以基本URL(Base URL)+ API路径(API Path)+命令字符串(CommandString)+签名(Signature)的格式重构最终的URL
标签:
原文地址:http://www.cnblogs.com/xiaoshi657/p/4780896.html