API接口設計之 安全性 與 性能


 

接口安全性

1. Token驗證機制

通過用戶名/密碼調用授權接口獲取Token,

設置token有效期保持用戶授權期間狀態,

可以使用token將信息保存在服務端,避免網絡間傳輸,目的在於防止用戶信息泄露,存儲狀態機。

 

先登錄,同時獲取token;

請求其他接口時帶上該token,服務端校驗;

 

 

2. 接口調用簽名

由於前后端分離前端通過http請求調用后端接口,期間通過網絡介質傳輸接口調用參數,黑客可能通過公共網域監聽http請求信息,竊取調用接口參數信息,並從中查詢規律,從而不通過客戶端,直接通過http直接請求調用接口。這種情況下需要通過簽名方式對一些敏感接口進行簽名訪問。

做法步驟:

a. 前后端約定Secret密鑰,密鑰可以盡可能復雜。

b. 約定MD5加密規則:一般格式:MD5(param1 + secret + param2 + timestamp)

c. 后端接收到前端參數后使用同樣得MD5算法進行加密操作,通過比對前后端密文,如果一致則可以調用后續業務。不一致則返回錯誤信息。

 

 

3. 接口限流

防止黑客惡意攻擊(比如cc攻擊)導致qps過高,可以考慮策略在服務入口為相同uid的賬戶請求限制每秒鍾的最高訪問數。

限流解決方案:

可以通過分布式緩存中間件Redis,將客戶得Uid作為key通過自增長獲取用戶接口調用次數,如果接口調用請求過多超過服務訪問閾值,拒絕用戶繼續訪問該接口。

通過Nginx在網管層面進行限流控制。使用方法可以使用nginx得limit_conn模塊實現,也可通過自定義腳本,通過刷訪問日志得方式實現。

 

 

 4. 接口冪等控制,接口如果沒有做冪等性控制,則改接口遇到接口重復調用或者接口調用方有重試機制,則會出現數據重復被錄入

得情況,這是需要考慮接口冪等問題,通常解決接口冪等性問題得常用方法是:

a. 在數據庫層面進行唯一鍵約束

b. 在接口調用前先調用獲取令牌接口獲取redis令牌,然后將令牌信息放入請求參數中提交,后台拿到令牌后訪問redis驗證,如果有該令牌則進行后續業務。

c. 數據庫樂觀鎖控制,在更新數據是,保存數據更新版本,每次更新版本+1,更新語句為:UPDATE table t set t.a = value and t.version = t.version +1 WHERE t.id = #{id} t.version = #{version}

 

接口性能

1. 接口無狀態設計,采用接口無狀態設計就可以輕松實現服務得橫向擴展,這樣當接口並發量高得時候就可以增加服務數量來提高接口得並發量。

2. 重要數據進行緩存預熱處理,從而實現調用接口時減少應用過多得和底層數據得交互,提升IO得性能。

3. 使用LRU,LFU,LNU等算法,緩存熱點數據,降低緩存擊穿率。

4. 使用消息中間件,對高頻接口進行異步消峰處理。提升接口得響應事件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM