溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

CloudStack如何生成Signature調(diào)用API

發(fā)布時間:2021-12-01 09:18:06 來源:億速云 閱讀:220 作者:小新 欄目:云計算

這篇文章主要介紹了CloudStack如何生成Signature調(diào)用API,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

    一:前言  

/***************該段-官話********************/

CloudStack API 也是基于 Web Service,可以使用任何一種支持 HTTP 調(diào)用的語言(例如 Java,PHP)編寫代碼。

調(diào)用代碼(caller)首先需要在管理服務(wù)器進行認(rèn)證。目前 CloudStack 采用兩種認(rèn)證方式:

  • Session 認(rèn)證:通過 login API,獲得一個 JSESSIONID cookie 和一個 SESSIONKEY token。

  • API Key 認(rèn)證。

/***************該段-官話********************/

二:采用 API Key 進行認(rèn)證:

1、生成Signature 之前,我們得先擁有[API Key] & [Security  Key],該文主要記錄Signature 加密實現(xiàn),如何生成這兩個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、當(dāng)然也少不了Java 版本的:CloudStack 開源包里應(yīng)該能找到,在此擼主分享一篇帖文:

 http://blog.csdn.net/rishengcsdn/article/details/38387721

  三:使用C# 生成 Signature,有了以上資料,寫起C# 版本的,自是得心應(yīng)手,當(dāng)然也有些許差異,幾個問題需要注意:

 1、[ApiKey] & [SecretKey] 字符串較長,切勿出錯

 2、參數(shù)加密時以小些形式

 3、參數(shù)加密時,需要對其進行排序(以參數(shù)第一個字母為準(zhǔn))

 4、加密前統(tǒng)一編碼:UTF8

 5、加密方式為:HmacSha1

 6、加密后信息確認(rèn)編碼為: UTF8

 7、組合字符串

四:代碼實現(xiàn)(僅供參考,測試代碼)

如:獲取云主機的狀態(tài)信息

參數(shù)信息:

   調(diào)用地址:“http://*.*.*.*:**/client/api?”

   API 名稱: “l(fā)istVirtualMachines”

   參      數(shù):

               details=stats  狀態(tài)

               account=admin 操作人賬號

               id=**** 虛擬主機編號

API    KEY:“******************”

SecretKey: “****************”

        /// <summary> 生成 CloudStack Signature 可執(zhí)行Url
        /// 生成 CloudStack 可執(zhí)行Url
        /// </summary>
        /// <returns></returns>
        public string GetSignatureApiUrl()
        {
            /* 調(diào)用CloudStack API 生成Signature 并組合完整URL
             * 1、根據(jù)配置獲取參數(shù)
             * 2、有效性驗證
             * 3、參數(shù)信息排序
             * 4、統(tǒng)一編碼 UTF-8
             * 5、使用HmacSha1 編碼加密
             * 6、加密后內(nèi)容再次轉(zhuǎn)UTF-8
             * 7、組合
             */
            var ApiKey="*********************";
            var SecretKey="******************";
             
            //CloudStack API 調(diào)用地址
            var DeveloperServer ="http://*.*.*.*:**/client/api?";
            
            //ApiKey 統(tǒng)一編碼
            Encoding enc = new UTF8Encoding();
            string encodedApiKey = HttpUtility.UrlEncode(ApiKey, enc);
            string encodedSecreKey = HttpUtility.UrlEncode(SecretKey, enc);
            
            //參數(shù),傳遞過來
            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)
            //參數(shù)信息進行排序
            Args = Args.OrderBy(o=>o).ToList();
            
            //參數(shù)拼接
            var paramsString = string.Join("&",Args);

            //對執(zhí)行信息進行加密
            string signature = new HashEncryptHelp().HmacSha1(encodedSecreKey, paramsString.Tolower());

            //加密信息轉(zhuǎn)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=****

測試執(zhí)行:成功.

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“CloudStack如何生成Signature調(diào)用API”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI