api安全規範

2022-07-13 08:00:12 字數 1719 閱讀 3109

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...