CloudStack如何生成Signature调用API

这篇文章主要介绍了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: “****************”

        ///  生成 CloudStack Signature 可执行Url
        /// 生成 CloudStack 可执行Url
        /// 
        /// 
        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 Args = new List();
            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”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!


文章标题:CloudStack如何生成Signature调用API
标题路径:http://csdahua.cn/article/jeppch.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流