CloudStack如何生成Signature调用API

56次阅读
没有评论

共计 2665 个字符,预计需要花费 7 分钟才能阅读完成。

这篇文章主要介绍了 CloudStack 如何生成 Signature 调用 API,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

    一:前言  

/*************** 该段 - 官话 ********************/

CloudStack API 也是基于 Web Service,可以使用任何一种支持 HTTP 调用的语言(例如 Java,PHP)编写代码。

调用代码(caller)首先需要在管理服务器进行认证。目前 CloudStack 采用两种认证方式:

Session 认证:通过 login API,获得一个 JSESSIONID cookie 和一个 SESSIONKEY token。

API Key 认证。

/*************** 该段 - 官话 ********************/

二:采用 API Key 进行认证:

1、生成 Signature 之前,我们得先拥有 [API Key] [Security  Key],该文主要记录 Signature 加密实现,如何生成这两个 Key   撸主 便不再赘述。

2、官方提供生成 Signature   的语言是 Perl:地址如下,可自行观摩:

  https://github.com/snumano/CloudStack-API/blob/master/generate-url.pl

3、进而撸主又找到了 Python 版本:地址如下:

  https://github.com/jasonhancock/cloudstack-pythonclient/blob/master/CloudStack/BaseClient.py

4、当然也少不了 Java 版本的:CloudStack 开源包里应该能找到,在此撸主分享一篇帖文:

 http://blog.csdn.net/rishengcsdn/article/details/38387721

  三:使用 C# 生成 Signature,有了以上资料,写起 C# 版本的,自是得心应手,当然也有些许差异,几个问题需要注意:

 1、[ApiKey] [SecretKey] 字符串较长,切勿出错

 2、参数加密时以小些形式

 3、参数加密时,需要对其进行排序(以参数第一个字母为准)

 4、加密前统一编码:UTF8

 5、加密方式为:HmacSha1

 6、加密后信息确认编码为:UTF8

 7、组合字符串

四:代码实现(仅供参考,测试代码)

如:获取云主机的状态信息

参数信息:

    调用地址:“http://*.*.*.*:**/client/api?”

   API 名称:“listVirtualMachines”

    参       数:

               details=stats   状态

               account=admin 操作人账号

               id=**** 虚拟主机编号

API    KEY:“******************”

SecretKey:“****************”

 ///  summary   生成  CloudStack Signature  可执行 Url
 ///  生成  CloudStack  可执行 Url
 ///  /summary 
 ///  returns /returns 
 public string GetSignatureApiUrl()
 {
 /*  调用 CloudStack API  生成 Signature  并组合完整 URL
 * 1、根据配置获取参数
 * 2、有效性验证
 * 3、参数信息排序
 * 4、统一编码  UTF-8
 * 5、使用 HmacSha1  编码加密
 * 6、加密后内容再次转 UTF-8
 * 7、组合
 */
 var ApiKey= ********************* 
 var SecretKey= ****************** 
 
 //CloudStack API  调用地址
 var DeveloperServer = http://*.*.*.*:**/client/api? 
 
 //ApiKey  统一编码
 Encoding enc = new UTF8Encoding();
 string encodedApiKey = HttpUtility.UrlEncode(ApiKey, enc);
 string encodedSecreKey = HttpUtility.UrlEncode(SecretKey, enc);
 
 // 参数,传递过来
 List string  Args = new List string 
 Args.Add(command= +Command)
 Args.Add( details=stats 
 Args.Add( account=admin 
 Args.Add( id=**** 
 
 // 有效性验证
 // 略
 
 var oldparmsString=string.Join(,Args);
 
 Args.Add(apikey= +ApiKey)
 // 参数信息进行排序
 Args = Args.OrderBy(o= o).ToList();
 
 // 参数拼接
 var paramsString = string.Join(,Args);
 // 对执行信息进行加密
 string signature = new HashEncryptHelp().HmacSha1(encodedSecreKey, paramsString.Tolower());
 // 加密信息转 UTF-8
 string encodedSignature = HttpUtility.UrlEncode(signature, enc);
 // 组合 URL 字符
 string url = DeveloperServer + oldparmsString+  apikey=  + encodedApiKey +  signature=  + encodedSignature;
 return url;
 }

输出:http://*.*.*.*:**/client/api?command=listVirtualMachines details=stats account=admin id=**** apikey=**** signature=****

测试执行:成功.

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“CloudStack 如何生成 Signature 调用 API”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-17发表,共计2665字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)