騰訊云 API 使用簽名方法(Signature)對(duì)接口進(jìn)行鑒權(quán)荚斯。每一次請求都需要在請求中包含簽名信息, 以驗(yàn)證用戶身份让网。
在第一次使用云API之前嘁灯,用戶首先需要在騰訊云網(wǎng)站上申請安全憑證,安全憑證包括 SecretId 和 SecretKey, SecretId 是用于標(biāo)識(shí) API 調(diào)用者的身份靶病,SecretKey是用于加密簽名字符串和服務(wù)器端驗(yàn)證簽名字符串的密鑰会通。SecretKey 必須嚴(yán)格保管。避免泄露娄周。
申請安全憑證
登錄 騰訊云, 進(jìn)入 管理中心 頁面
點(diǎn)擊 管理賬號(hào) 下的 安全憑證 鏈接, 進(jìn)入 云API訪問密鑰管理 頁面
在 云API訪問密鑰管理 頁面可以新建 SecretId, 每個(gè)帳號(hào)最多可以創(chuàng)建兩個(gè) SecretId
生成簽名串
假設(shè)上一步申請的 SecretId 和 SecretKey 分別是:
SecretId: AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA
SecretKey: Gu5t9xGARNpq86cd98joQYCN3Cozk1qA
以 查詢實(shí)例列表 請求為例, 請求參數(shù)為:
方法名: Action=DescribeInstances
SecretId: SecretId= AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA
當(dāng)前時(shí)間戳: Timestamp=1408704141
隨機(jī)正整數(shù): Nonce=345122
區(qū)域: Region=gz
接口簽名的詳細(xì)步驟如下:
- 對(duì)參數(shù)排序
對(duì)請求參數(shù)按參數(shù)名做字典序升序排列, 結(jié)果如下:
{ 'Action' : 'DescribeInstances', 'Nonce' : 345122, 'Region' : 'gz', 'SecretId' : 'AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA', 'Timestamp' : 1408704141}
- 拼接請求字符串
把上一步排序好的請求參數(shù), 格式化成 k=v涕侈,然后用"&"拼接在一起。注意不包括Signature參數(shù)煤辨,v為原始值而非url編碼后的值裳涛。結(jié)果為:
Action=DescribeInstances&Nonce= 345122&Region=gz&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA&Timestamp=1408704141
- 拼接簽名源文字符串
拼接簽名原文時(shí)需要如下參數(shù):
請求方法: 支持 POST 和 GET 方式, 這里架設(shè)為 GET 請求, 注意 GET 為全大寫
請求主機(jī): cvm.api.qcloud.com, 根據(jù)接口所屬模塊不同域名也不同, 詳見接口文檔
請求路徑: /v2/index.php
請求字符串: 即前 2 步生成的請求字符串
簽名源文的拼接規(guī)則為:
請求方法 + 請求主機(jī) +請求路徑 + ? + 請求字符串
拼接結(jié)果為:
GETcvm.api.qcloud.com/v2/index.php?Action=DescribeInstances&Nonce= 345122&Region=gz&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA&Timestamp=1408704141
- 生成簽名串
- 騰訊云 API 使用 HMAC-SHA1 算法對(duì)請求進(jìn)行簽名
- 簽名串需要使用 Base64 編碼
- 發(fā)送請求時(shí), 對(duì)簽名串進(jìn)行 Url Encode
以 PHP 語言為例:
srcStr = 'GETcvm.api.qcloud.com/v2/index.php?Action=DescribeInstances&Nonce=345122&Region=gz&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA&Timestamp=1408704141';
srcStr,
signStr;
這里得到的簽名串為:
HgIYOPcx5lN6gz8JsCFBNAWp2oQ=
使用其它程序設(shè)計(jì)語言開發(fā)時(shí), 可用上面示例中的原文進(jìn)行簽名驗(yàn)證, 得到的簽名串與例子中的一致即可
- 添加簽名, 發(fā)送請求
- 請求參數(shù)中添加 Signature 參數(shù), 參數(shù)值為上一步生成的簽名串, 并且對(duì)簽名進(jìn)行 Url Encode
- 發(fā)送 HTTPS 協(xié)議的 GET 請求即可得到 JSON 字符串格式的接口返回值
最終的請求 URL 為:
將示例代碼中的 YOUR_SECRET_ID 和 YOUR_SECRET_KEY 替換成實(shí)際的 SecretId 和 SecretKey
示例代碼僅供參考, 請根據(jù)實(shí)際情況使用众辨。
原文:
http://www.qcloud.com/wiki/接口鑒權(quán)