文档章节

(一) CloudStack 生成 Signature 调用API (C#)

董咚咚
 董咚咚
发布于 2014/12/23 11:25
字数 783
阅读 92
收藏 0

    一:前言  

    撸主刚开始尝试使用CloudStack API时; 查阅相关资料,网上基本是官方的一个版本。大多都是复制内容;没有任何帮助。且撸主是在 .NET 的框架下操作;资料更少,目前经过学习摸索 系统基本处于稳定,故将前期遇到的问题整理一二,望能对大家有所帮助。


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

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=****


测试执行:成功.

© 著作权归作者所有

共有 人打赏支持
董咚咚
粉丝 0
博文 15
码字总数 4401
作品 0
浦东
项目经理
部署Cloudstack环境(cloudstack manager+kvm,适合RHEL/CentOS)

系统:CentOS 6.3 x86_64 版本:Cloudstack 4.2.1 CloudStack是一个开源的具有高可用性及扩展性的云计算平台。支持管理大部分主流的hypervisors,如KVM,XenServer,VMware,Oracle VM,Xen...

AnthonyYau
2014/04/22
0
0
cloudstack+ceph中解决ceph单点问题

问题描述: 在cloudstack 中用ceph作为主存储时,常常是填入ceph-mon的一台机器ip作为接入口。但是一旦这台机器出现问题,cloudstack将无法访问主存储。 解决方案: 一. 登录到cloustack man...

云中不知人
06/27
0
0
cloudstack之 添加指定IP实例

前言: 一句话来描述terraform话: 基于各种云的api实现管理基础设施的命令行工具 官方原话: Terraform is a tool for building, changing, and combining infrastructure safely and effic...

Firxiao
2015/06/08
0
0
开源云平台 CloudStack 4.1.0 安装详解 - 1、管理节点

CloudStack是一个功能强大、UI友好的开源云(IaaS)计算解决方案。自Ctrix将CloudStack捐献给 apache 后,一直持续高速发展,其社区活跃度已经渐渐赶上风头一时无两的另一开源云OpenStack平台...

qinerg
2013/07/16
0
35
CloudStack 4.4学习总结之简介

CloudStack 4.4学习总结之简介 一、CloudStack简介 1、CloudStack是一个开源的具有高可用性及扩展性的云计算平台。 2、其实CloudStack更像是一个商业化过后的产品,有着非常好的用户界面,各...

perofu
2014/10/23
0
2

没有更多内容

加载失败,请刷新页面

加载更多

面向对象类之间的关系

面向对象类之间的关系:is-a、has-a、use-a is-a关系也叫继承或泛化,比如大雁和鸟类之间的关系就是继承。 has-a关系称为关联关系,例如企鹅在气候寒冷的地方生活,“企鹅”和“气候”就是关...

gackey
32分钟前
1
0
读书(附电子书)|小狗钱钱之白色的拉布拉多

关注公众号,在公众号中回复“小狗钱钱”可免费获得电子书。 一、背景 之前写了一篇文章 《小狗钱钱》 理财小白应该读的一本书,那时候我才看那本书,现在看了一大半了,发现这本书确实不错,...

tiankonguse
55分钟前
1
0
Permissions 0777 for ‘***’ are too open

异常显示: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ......

李玉长
57分钟前
3
0
区块链10年了,还未落地,它失败了吗?

导读 几乎每个人,甚至是对通证持怀疑态度的人,都对区块链的技术有积极的看法,因为它有可能改变世界。然而,区块链技术问世已经10年了,我们仍然没有真正的用上区块链技术。 几乎每个人,甚...

问题终结者
今天
2
0
20180921 su与sudo命令、限制root用户通过ssh远程登录

su 命令 用户切换。 su # 切换到root用户su username # 切换到username用户# su 后面加-时,会初始化当前用户的各种环境su - username # 指定用户执行某些命令 su - -c "touch /tm...

野雪球
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部