这篇文章主要介绍了CloudStack如何生成Signature调用API,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
一:前言
/***************该段-官话********************/
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=****
测试执行:成功.
感谢你能够认真阅读完这篇文章,希望小编分享的“CloudStack如何生成Signature调用API”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/dyi/blog/359504