共计 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 行业资讯频道,更多相关知识等着你来学习!