共計 2665 個字符,預計需要花費 7 分鐘才能閱讀完成。
這篇文章主要介紹了 CloudStack 如何生成 Signature 調用 API,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
一:前言
/*************** 該段 - 官話 ********************/
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=****
測試執行:成功.
感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“CloudStack 如何生成 Signature 調用 API”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!