API接口安全性設計

API接口安全性設計 接口的安全性主要圍繞Token、Timestamp和Sign三個機制展開設計,保證接口的數據不會被篡改和重復調用,下面具體來看:

Token授權機制:用戶使用用戶名密碼登錄后服務器給客戶端返回一個Token(通常是UUID),并將Token-UserId以鍵值對的形式存放在緩存服務器中。服務端接收到請求后進行Token驗證,如果Token不存在,說明請求無效。

關于token的說明:為不重復的字符串(一般為UUID),然后在Redis(任意緩存服務器)中維護Token—-Uid的用戶信息關系,以便其他api對token的校驗

時間戳超時機制:用戶每次請求都帶上當前時間的時間戳timestamp,服務端接收到timestamp后跟當前時間進行比對,如果時間差大于一定時間(比如5分鐘),則認為該請求失效,這個時間要保證足夠完成本次請求的同時盡量短,可以減少緩存服務器的壓力(見簽名機制)。

簽名機制:將Token和時間戳加上其他請求參數就行MD5或SHA-1算法(可根據情況加點鹽)加密,加密后的數據為本次請求的簽名sign,并將該簽名存放到緩存服務器中,超時時間設定為跟時間戳的超時時間一致(這就是為什么要盡量短,二者時間一致可以保證無論在timestamp規定時間內還是外本URL都只能訪問一次)。服務端接收到請求后以同樣的算法得到簽名,并跟當前的簽名進行比對,如果不一樣,說明參數被更改過,直接返回錯誤標識。同一個簽名只能使用一次,如果發現緩存服務器中已經存在了本次簽名,則拒絕服務。

整個流程如下:

1、客戶端通過用戶名密碼登錄服務器并獲取Token

2、客戶端生成時間戳timestamp,并將timestamp作為其中一個參數

3、客戶端將所有的參數,包括Token和timestamp按照自己的算法進行排序加密得到簽名sign

4、將token、timestamp和sign作為請求時必須攜帶的參數加在每個請求的URL后邊(http://url/request?token=123&timestamp=123&sign=123123123)

5、服務端寫一個過濾器對token、timestamp和sign進行驗證,只有三個參數都正確且在規定時間內,本次請求才有效 在以上三中機制的保護下,

如果黑客劫持了請求,并對請求中的參數進行了修改,簽名就無法通過;

如果黑客使用已經劫持的URL進行DOS攻擊,服務器則會因為緩存服務器中已經存在簽名而拒絕服務,所以DOS攻擊也是不可能的;

如果黑客隔一段時間進行一次DOS攻擊(假如這個時間大于簽名在緩存服務器中的緩存時長),則會因為時間戳超時而無法完成請求,這就是為什么簽名的緩存時長要跟時間戳的超時時長一樣。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • 方案一 (客戶端token方式)客戶端生成token傳給服務端校驗,一致就通過用戶驗證。 通過時間戳+用戶唯一標識...
    RobinYu閱讀 2,174評論 0 1
  • 題外話: 有人說:就算是https加密加API接口加密黑客照樣可以攻擊你,小公司沒必要浪費這個精力去考慮這個問題,...
    樹懶啊樹懶閱讀 2,232評論 0 7
  • 9. — 番外 — /兩個半月后 “看來我們很受大家喜愛呢!”你看著馬克說。“那當然,男方這么帥,女方是個大美女,...
    沙特阿菠蘿閱讀 288評論 0 1
  • 阿靈飄浮在空中,參天大樹從身體兩邊往后慢慢移動。“我是在飛嗎?”阿靈伸開手腳像魚兒一樣劃動著,真的加速了不少...
    風陌停下閱讀 203評論 0 0