請求安全性: 服務器端在接收到請求的時候,要主動鑑別該請求是否有效,是否可接受。html
token:已登錄用戶的識別碼
解決的問題:用戶調用接口時,不用每次都帶上用戶名和密碼,避免了頻繁在網絡中傳輸密碼被截獲的風險。
使用場景:用戶登陸系統時傳入用戶名和密碼,服務器校驗成功以後,根據uuid等參數生成token返回給客戶端,同時把該token和該用戶的對應關係緩存在服務器端。客戶端在後續的請求接口中不用每次都傳入用戶名和密碼,只須要傳入token便可。服務器會根據token肯定客戶端的身份。
注意:token可設置生效時間,token失效以後,客戶端從新請求token。算法
sign:請求參數的簽名
解決問題:避免請求參數被惡意修改。保證了請求數據的一致性。
使用場景:客戶端和服務端約定一個簽名生成算法。客戶端在請求接口以前調用簽名算法,根據參數生成sign值。而後把sign和請求參數一併傳給服務器。
服務器收到到參數和簽名以後,根據請求參數,調用簽名算法計算出簽名,而後比較該簽名和客戶端傳過來的簽名是否一致,若是一致,則說明請求參數未被修改過,若是不一致,則說明請求參數被修改過。數組
nonce:請求中附帶的隨機數
解決問題:防止惡意程序重複向服務器重複發送相同的請求。
使用場景:客服端在向服務器發出請求以前,隨機生成nonce參數。服務器在接收到請求以後,取出nonce參數,而後去緩存中查找是否已存在nonce的值。若是存在,則說明該請求已經收到過,則 拒絕本次請求,若是不存在,則說明首次接收到該請求,正常進行處理。緩存
timestamp:客服端發送請求的時間戳(timestamp通常和nonce組合使用)
解決的問題:防止服務器端緩存nonce數據量過大的問題。當服務器緩存的nonce較多時,每次查找nonce就會耗費大量時間。經過添加請求時間戳,判斷請求時間到服務器接收到請求的時間差是否在有效處理時間內(例如5分鐘),若是在5分鐘以內則進行處理,若是超出五分鐘則拒絕該請求。這樣,服務器端在緩存nonce的時候,能夠設置nonce的緩存時間爲5分鐘,超出5分鐘以後,自動清除掉緩存中的nonce,這樣就避免了緩存大量nonce的問題。安全
使用場景:客服端在發出請求時,附帶timestamp,記錄下當前的請求時間。服務器接收到請求時,取出timestamp,判斷和當前的時間差,若是超出必定的時間(例如5分鐘),則放棄該請求。若是在5分鐘以內,則取出nonce,去緩存中查找nonce,若是已存在則拒絕掉,若是不存在則正常處理。服務器
數據保密性: http請求的數據不管是GET仍是POST均可能會被抓包獲取到數據。爲了不用戶的敏感數據被竊取,則須要對數據進行加密處理。網絡
AES:對稱加密算法
使用方式:客服端和服務器端共同肯定一個用來加密和解密的祕鑰。而後客服端在請求服務器是經過該祕鑰對數據進行加密,服務器端在接收到請求以後使用該祕鑰對數據進行解密。
優點:加密效率高
缺點:祕鑰須要共享給客戶端,具備泄露的風險ui
RSA:非對稱加密算法
使用方式:服務器端生成公鑰和私鑰,把私鑰發送給客戶端。客服端在請求服務器是,經過公鑰對數據進行加密。服務器端接收到請求以後,使用私鑰對加密的數據進行解密。
優點:不須要共享私鑰,避免了私鑰泄露的風險。
劣勢:加密效率低,數據量大是較爲耗時編碼
實際場景中,通常使用以下策略進行加密:
服務器端經過RSA生成公鑰,而後把公鑰給客戶端。客服端在請求服務器前, 隨機生成AES祕鑰,而後用AES祕鑰加密請求數據。以後用RSA公鑰對AES祕鑰進行加密,而後把加密以後的AES祕鑰和加密後的請求數據一塊兒發送給服務器。服務器收到請求以後,先用RSA私鑰解密出AES祕鑰,而後用AES祕鑰對請求數據進行解密,獲取請求數據。加密
其餘常見算法說明:
MD5:信息摘要算法,不是加密算法。
加密算法須要可以解密出原始數據的。MD5是不可逆的,不存在解密的說法。MD5的目的是用來校驗文件/數據是否和原始數據一致,是否被修改過。只要文件/數據被修改過,則計算出的MD5就不一致。SHA-1相似,能夠歷來文件校驗和計算數字簽名。
應用場景:做爲計算sign簽名的算法,校驗數據的一致性
Base64:編碼規範,不是加密算法。
其存在的目的是爲了解決部分網絡傳輸不支持不可見字符的問題。經過Base64編碼把數據流轉化爲可打印顯示的字符,以後經過網絡進行傳輸。既然是編碼,那麼就能夠被解碼還原的。其相似於URL編碼,爲了把一些特殊字符轉化爲安全字符。
應用場景:RSA的公鑰爲byte數組,在傳給客戶端的時候 ,就能夠經過Base64編碼把byte數組轉換爲字符串,而後傳給客戶端。
=========================================
原文連接:網絡請求中常見的加密機制和加密算法理解
=========================================
----end--