應用 API介面安全性設計1

2021-08-21 06:22:57 字數 2207 閱讀 4089

1. 介面的安全性設計:主要圍繞token、timestamp和sign三個機制展開設計,保證介面的資料不會被篡改和重複呼叫,下面具體來看:

a) token授權機制

使用者使用使用者名稱密碼登入後伺服器給客戶端返回乙個token(通常是uuid),並將token-userid 以鍵值對的形式存放在快取伺服器中(如:redis中)。服務端接收到請求後進行token驗證,如果token不存在,說明請求無效。token是客戶端訪問服務端的憑證。

b) 時間戳超時機制:

使用者每次請求都帶上當前時間的時間戳timestamp,服務端接收到timestamp後跟當前時間進行比對,如果時間差大於一定時間(比如10分鐘),則認為該請求失效。時間戳超時機制是防禦dos攻擊的有效手段。

c) 簽名機制:

將[token]和[時間戳]加上其他請求引數再用md5或sha-1演算法加密,加密後的資料就是本次請求的簽名sign,服務端接收到請求後以同樣的演算法得到簽名,並跟當前的簽名進行比對,如果不一樣,說明引數被更改過,直接返回錯誤標識。簽名機制保證了資料不會被篡改。

d) 拒絕重複呼叫(非必須)

客戶端第一次訪問時,將簽名sign存放到快取伺服器中,超時時間設定為跟時間戳的超時時間一致,二者時間一致可以保證無論在timestamp限定時間內還是外 url都只能訪問一次。如果有人使用同乙個url再次訪問,如果發現快取伺服器中已經存在了本次簽名,則拒絕服務。如果在快取中的簽名失效的情況下,有人使用同乙個url再次訪問,則會被時間戳超時機制攔截。這就是為什麼要求時間戳的超時時間要設定為跟時間戳的超時時間一致。拒絕重複呼叫機制確保url被別人截獲了也無法使用(如抓取資料)。

2. 整個流程如下:a、客戶端通過使用者名稱密碼登入伺服器並獲取token;

b、客戶端生成時間戳timestamp,並將timestamp作為其中乙個引數;

c、客戶端將所有的引數,包括token和timestamp按照自己的演算法進行排序加密得到簽名sign;

d、將token、timestamp和sign作為請求時必須攜帶的引數加在每個請求的url後邊(http://url/request?token=123×tamp=123&sign=123123123);

e、服務端寫乙個過濾器對token、timestamp和sign進行驗證,只有在sign有效、token有效(在快取中存在)、timestamp未超時,三種情況同時滿足,本次請求才有效。在以上三中機制的保護下,如果有人劫持了請求,並對請求中的引數進行了修改,簽名就無法通過;

f、如果在上一步, 我們將簽名放在快取中(如:redis中)。 使用者每次請求的時候,先核對一下簽名是否使用過。如果使用過,直接拒絕範圍;如果沒有用過,才經過上一步的驗證。這樣就可以防止dos的攻擊。也可以避免使用者重複提交帶來的其他問題;

3. 具體實現a. token快取可以使用redis來實現。token-userid 存在redis之中。登入的時候存入,登出的時候刪除(注意定時刪除不用的token與userid);

b. 客戶端每次對使用者的請求,首先判斷簽名是否存在,如果存在直接拒絕;如果簽名不存在,去驗籤,通過驗籤後快取到redis中(注意定時清理不用的簽名。 一般所有的簽名設定5分鐘制動銷毀)。 

c. 簽名**的實現

public static string createsign(mapparams, boolean encode)    

throws unsupportedencodingexception else

object value = params.get(key);

string valuestring = "";

if (null != value)

if (encode) else

}

return md5utils.ge***5(temp.tostring()).touppercase();

}

d. 驗籤校驗

string sign = request.getparameter("sign");

enumeration<?> pnames = request.getparameternames();

mapparams = new hashmap();

while (pnames.hasmoreelements())

API介面安全性設計

介面的安全性主要圍繞token timestamp和sign三個機制展開設計,保證介面的資料不會被篡改和重複呼叫,下面具體來看 token授權機制 使用者使用使用者名稱密碼登入後伺服器給客戶端返回乙個token 通常是uuid 並將token userid以鍵值對的形式存放在快取伺服器中。服務端接收...

API介面安全性設計

介面的安全性主要圍繞token timestamp和sign三個機制展開設計,保證介面的資料不會被篡改和重複呼叫,下面具體來看 token授權機制 使用者使用使用者名稱密碼登入後伺服器給客戶端返回乙個token 通常是uuid 並將token userid以鍵值對的形式存放在快取伺服器中。服務端接收...

API介面安全性設計

介面的安全性主要圍繞token timestamp和sign三個機制展開設計,保證介面的資料不會被篡改和重複呼叫,下面具體來看 token授權機制 使用者使用使用者名稱密碼登入後伺服器給客戶端返回乙個token 通常是uuid 並將token userid以鍵值對的形式存放在快取伺服器中。服務端接收...