0

当我尝试使用 Apache CloudStack 4.6.0 的 deployVirtualMachine API 部署 VM 时,它可以在没有自定义选项的情况下正常工作。当我想部署具有自定义 cpuSpeed、vCPU 和内存的 VM 时,它会抛出下面给出的错误。

平台:CloudStack 4.6.0。

错误:“无法验证用户凭据和/或请求签名”

下面给出了对 CloudStack 的请求,没有通过应用程序(工作)提供定制服务:

apiKey=lGMCRQI6maiFCDsKuZAHI63u1upxCrUnNrWbXAnUZZE_qyEv7ozK_yNzYvNfXgX5x5mRcedIKynzSyLA5hf8yg&command=deployVirtualMachine&displayname=admin&displayvm=true&domainid=3776269a-949d-11e5-b907-e06995a35804&keyboard=us&name=priya&networkids=7efa5852-7e1f-4a26-9351-00f9d863aa3e&projectid=527ebed8-23f6-4c9f-9ee0-05926b035b1e&response=json&serviceofferingid=cb9fe060-1870-4bd0-8c0e-3980107acce6&templateid=96e753af-5e1a-4bf9-a28a-9f609ee06202&zoneid=af3ed220-7e36-4459-a6ea-9587a18246c0&signature=FU4xL%2FdGsYoihfWdvT%2FPrwwzthQ%3D

并在下面通过应用程序(不工作)向 CloudStack 提供定制产品的请求:

apiKey=lGMCRQI6maiFCDsKuZAHI63u1upxCrUnNrWbXAnUZZE_qyEv7ozK_yNzYvNfXgX5x5mRcedIKynzSyLA5hf8yg&command=deployVirtualMachine&details%5B0%5D.cpuNumber=3&details%5B0%5D.cpuSpeed=1500&details%5B0%5D.memory=512&hypervisor=KVM&iptonetworklist%5B0%5D.networkid=7efa5852-7e1f-4a26-9351-00f9d863aa3e&response=json&serviceofferingid=a1613485-8cdf-4d84-8b97-8c2695128a2f&templateid=37acb430-949d-11e5-b907-e06995a35804&zoneid=af3ed220-7e36-4459-a6ea-9587a18246c0&signature=FU4xL%2FdGsYoihfWdvT%2FPrwwzthQ%3D

返回错误: “无法验证用户凭据和/或请求签名”

值的映射与 CloudStack 命令字符串格式相同。它为两者生成相同的签名。CloudStack 中的显着差异是 cpuSpeed 和 cpuNumber。在速度和数字中,第一个字母大写。在签名生成期间,我们会将所有值转换为小写。

4

1 回答 1

0

马萨!

我相信您在第二个请求中错误地使用了以前的签名,因为 HMAC1 签名不能与不同的参数相同。在任何情况下 details[0].xxx 应该影响最终签名

您可以使用本手册为每个 API 调用 (Python) 生成签名。

简而言之,算法如下:

  1. 获取所有请求参数列表
  2. URL 编码参数和值
  3. 创建一个看起来像 param1=foo¶m2=bar¶m3=foobar 的参数字符串(来自请求)
  4. 使用 HMAC1 算法获取此字符串的哈希值
  5. 使用 Base64 编码对结果字符串进行编码
  6. 将结果字符串添加到请求的末尾 +'&signature= RESULTSIGNATURESTRING '
于 2015-12-29T10:59:48.357 回答