java 如何保證接口的安全性


  在開發過程中,肯定會有和第三方或者app端的接口調用。在調用的時候,如何來保證非法鏈接或者惡意攻擊呢?

1.簽名

    根據用戶名或者用戶id,結合用戶的ip或者設備號,生成一個token。在請求后台,后台獲取http的head中的token,校驗是否合法(和數據庫或者Redis中記錄的是否一致,在登錄或者初始化的時候,存入數據庫/redis

 

在使用Base64方式的編碼后,Token字符串還是有20多位,有的時候還是嫌它長了。由於GUID本身就有128bit,在要求有良好的可讀性的前提下,很難進一步改進了。那我們如何產生更短的字符串呢?還有一種方式就是較少Token的長度,不用GUID,而采用一定長度的隨機數,例如64bit,再用Base64編碼表示:

    var rnd = new Random();
    var tokenData = userIp+userId;
    rnd.NextBytes(tokenData);
    var token = Convert.ToBase64String(tokenData).TrimEnd('=');

由於這里只用了64bit,此時得到的字符串為Onh0h95n7nw的形式,長度要短一半。這樣就方便攜帶多了。但是這種方式是沒有唯一性保證的。不過用來作為身份認證的方式還是可以的(如網盤的提取碼)。

2.加密

   客戶端和服務器都保存一個秘鑰,每次傳輸都加密,服務端根據秘鑰解密。

   

客戶端:

    1、設置一個key(和服務器端相同)

    2、根據上述key對請求進行某種加密(加密必須是可逆的,以便服務器端解密)

    3、發送請求給服務器

 

服務器端:

    1、設置一個key

    2、根據上述的key對請求進行解密(校驗成功就是「信任」的客戶端發來的數據,否則拒絕響應)

    3、處理業務邏輯並產生結果

    4、將結果反饋給客戶端

3.第三方支持

  比如spring security-oauth 

有興趣的,可以參考這篇帖子

http://wwwcomy.iteye.com/blog/2230265

 


免責聲明!

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



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