1. api簽名的目的
校驗api呼叫者的身份,是否有權訪問
校驗請求的資料完整性,防止被中間人篡改
防止重放攻擊
2.基本概念
3.基於簽名的認證過程
客戶端
構建http請求,填寫必要的date等http首部資訊
按簽名演算法計算出signature
將accesskey和signature置於「authorization」首部中。格式"authorization: letv accesskey signature"
傳送http請求
服務端收到請求,從authorization中得到accesskey和簽名
根據accesskey取得此應用對應的secretkey
用secretkey和請求內容進行簽名,得到服務端簽名
對比服務端簽名和使用者請求解析出來簽名,如果一致則認證通過,否則認證不通過
4.簽名演算法
簽名計算:
signature = hmac-sha1(secretkey, stringtosign)
簽名字串(stringtosign)的構造:
httpmethod:http請求方法,如get、post、put、delete,需大寫。
path:uri path,如/api/v1/message
body-md5:http body的md5摘要,小寫。如果body為空,body-md5為空字串
date:http首部字段,請求的當前時間。格式遵循rfc822,如mon, 24 nov 2014 12:11:17 gmt
param string:
將所有引數(包括get或post的引數,忽略值為空的引數)格式化為「key=value」格式,如「k1=v1」、「k2=v2」、「k3=v3」 包括url引數和post請求的表單方式,當引數為json的情況下不參與,將格式化好的引數鍵值對以字典序公升序排列後,拼接在一起,如 "k1=v1&k2=v2&k3=v3",根據http協議要求,傳遞引數都需要對引數值做url encoding,這樣請求接受方才能接受到正確的引數值。這種情況下,做簽名時使用的應該是原生值而不是encoding之後的值。
簽名php**
簽名**-php<?php
$body = '';
$date = 'tue, 25 nov 2014 14:00:52 cst';
echo _getsign($key, $body, $date
);//
時間的生成
//echo date('d, d m y h:i:s t');
function _getsign($key, $body, $date
)
示例參考資料
《http權威指南》
API介面規範
對於資源的具體操作型別,由http動詞表示。常用的http動詞有下面四個 括號裡是對應的sql命令 get select 從伺服器取出資源 一項或多項 post create 在伺服器新建乙個資源。put update 在伺服器更新資源 客戶端提供改變後的完整資源 delete delete 從伺服...
api介面規範
api與使用者的通訊協議,總是使用https協議,確保互動資料的傳輸安全。應該將api的版本號放入url。另一種做法是,將版本號放在http頭資訊中,但不如放入url方便和直觀。採用多版本並存,增量發布的方式 v n代表版本號,分為整形和浮點型 整形的版本號 大功能版本發布形式 具有當前版本狀態下的...
API 介面開發規範
api與使用者的通訊協議,總是使用https協議,確保互動資料的傳輸安全。應該盡量將api部署在專用網域名稱之下。如果確定api很簡單,不會有進一步擴充套件,可以考慮放在主網域名稱下。應該將api的版本號放入url。v 另一種做法是,將版本號放在http頭資訊中,但不如放入url方便和直觀。gith...