文档章节

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

董咚咚
 董咚咚
发布于 2014/12/23 11:25
字数 783
阅读 87
收藏 0
点赞 0
评论 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
浦东
项目经理
CloudStack4.10+GlusterFS4.10测试

CloudStack4.10测试 测试环境 IP 系统 虚拟化工具 服务 账户/密码 192.168.2.185 Centos7.2 KVM NFS/manage/Agent root/123456 192.168.2.203 Centos7.2 KVM Agent root/123456 192.168.2.2......

boy461205160 ⋅ 05/18 ⋅ 0

cloudstack4云平台centos6.4安装配置教程二--配置cloudstack

上一篇文章中我们讲到控制节点的安装,这里我们说下控制节点完成后cloudstack的配置,也就是开始配置我们第一个简单云平台。 配置cloudstack 浏览器输入管理节点web地址:http://10.0.0.150...

zhangdiandong ⋅ 2014/05/19 ⋅ 0

用 CloudStack 配置和管理一个简单云

CloudStack 的配置、部署与管理,以及 API 的使用 CloudStack 是 Ctrix 公司在 IaaS 市场上的主打产品,它提供了对云计算资源的灵活部署与管理能力。今年上半年 Ctrix 将其源代码贡献给 Apac...

IBMdW ⋅ 2013/03/24 ⋅ 0

Kubernetes社区是否应该害怕AWS?

Krish是Medium的专栏作家,在最近的系列文章中,他提出了一个观点“Kubernetes是事实上的领导者,但Kubernetes社区应该对AWS感到害怕”,他是根据有关Kubernetes部署实例的公开的可用信息提出...

Docker ⋅ 04/13 ⋅ 0

C#中调用C++生成的dll出错,请教请教!

在C++中生成的dll,函数定义为int CebxInitial(string inFilename) 在WPF中调用(属于C#吧),编译链接没错,运行报错: Managed Debugging Assistant 'PInvokeStackImbalance' has detected...

无理取闹 ⋅ 2011/09/07 ⋅ 5

cloudstack之 添加指定IP实例

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

Firxiao ⋅ 2015/06/08 ⋅ 0

在php中调用淘宝Open Api出现Invalid signature问题解决

今日想试试淘宝开放平台的API,按照示例一步步弄下来,都没哟问题 就是去调用api的时候 总是报 invalid Signature 百思不得解 然后忽然看到生成签名时我用的数组中有 $apiparams['parent_cid...

qingfeng哥 ⋅ 2013/06/10 ⋅ 0

CloudStack密码加密和解密

一、关于加密和解密 CloudStack存储一些敏感密码和密钥用于提供安全保障。这些值被自动加密。 数据库密钥(该密钥不是数据库用户密码,而是在使用cloudstack-setup-databases初始化数据库时,...

tangwenjun ⋅ 2014/06/15 ⋅ 0

C#开发微信门户及应用(32)--微信支付接入和API封装使用

在微信的应用上,微信支付是一个比较有用的部分,但也是比较复杂的技术要点,在微商大行其道的年代,自己的商店没有增加微信支付好像也说不过去,微信支付旨在为广大微信用户及商户提供更优质...

walb呀 ⋅ 2017/12/04 ⋅ 0

阿里云弹性裸金属服务器-神龙架构(X-Dragon)揭秘

在5月16日的飞天技术会新品直播中,特别邀请了业界知名大咖狒哥以及阿里云虚拟化资深专家旭卿作为现场直播的嘉宾。本次直播主要从产品背景到“X-Dragon架构”,从硬件设备到软件应用来深度的...

smile小太阳 ⋅ 05/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

磁盘管理—逻辑卷lvm

4.10-4.12 lvm 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化、挂载-->扩容。 磁盘分区 注: 创建分区时需要更改其文件类型为lvm(代码8e) 分区 3 已设置为 Linu...

弓正 ⋅ 22分钟前 ⋅ 0

Spring源码解析(六)——实例创建(上)

前言 经过前期所有的准备工作,Spring已经获取到需要创建实例的 beanName 和对应创建所需要信息 BeanDefinition,接下来就是实例创建的过程,由于该过程涉及到大量源码,所以将分为多个章节进...

MarvelCode ⋅ 41分钟前 ⋅ 0

a href="#"

<a href="#">是链接到本页,因为你有的时候需要有个链接的样式,但是又不希望他跳转,这样写,你可以把这个页面去试试

颖伙虫 ⋅ 48分钟前 ⋅ 0

js模拟栈和队列

栈和队列 栈:LIFO(先进后出)一种数据结构 队列:LILO(先进先出)一种数据结构 使用的js方法 1.push();可以接收任意数量的参数,把它们逐个推进队尾(数组末尾),并返回修改后的数组长度。 2....

LIAOJIN1 ⋅ 48分钟前 ⋅ 0

180619-Yaml文件语法及读写小结

Yaml文件小结 Yaml文件有自己独立的语法,常用作配置文件使用,相比较于xml和json而言,减少很多不必要的标签或者括号,阅读也更加清晰简单;本篇主要介绍下YAML文件的基本语法,以及如何在J...

小灰灰Blog ⋅ 57分钟前 ⋅ 0

IEC60870-5-104规约传送原因

1:周期循环2:背景扫描3:自发4:初始化5:请求6:激活7:激活确认8:停止激活9:停止激活确认10:激活结束11:远程命令引起的返送信息12:当地命令引起的返送信息13:文件传送20:响应总召...

始终初心 ⋅ 今天 ⋅ 0

【图文经典版】冒泡排序

1、可视化排序过程 对{ 6, 5, 3, 1, 8, 7, 2, 4 }进行冒泡排序的可视化动态过程如下 2、代码实现    public void contextLoads() {// 冒泡排序int[] a = { 6, 5, 3, 1, 8, 7, 2, ...

pocher ⋅ 今天 ⋅ 0

ORA-12537 TNS-12560 TNS-00530 ora-609解决

oracle 11g不能连接,卡住,ORA-12537 TNS-12560 TNS-00530 TNS-12502 tns-12505 ora-609 Windows Error: 54: Unknown error 解决方案。 今天折腾了一下午,为了查这个问题。。找了N多方案,...

lanybass ⋅ 今天 ⋅ 0

IDEA反向映射Mybatis

1.首先在pom文件的plugins中添加maven对mybatis-generator插件的支持 ` <!-- mybatis逆向工程 --><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-ma......

lichengyou20 ⋅ 今天 ⋅ 0

4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例

准备磁盘分区 fdisk /dev/sdb n 创建三个新分区,分别1G t 改变分区类型为8e 准备物理卷 pvcreate /dev/sdb1 pvcreate /dev/sdb2 pvcreate /dev/sdb3 pvdisplay/pvs 列出当前的物理卷 pvremo...

Linux_老吴 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部