前面的文章說了接口數據如何獲取,今天就來聊聊接口數據的安全問題。說到接口加密驗證,通常都稱作“簽名”,類似于名人的個性簽名,讓其它人無法模仿。比如說請求接口刪除自己寫的文章,又或者請求接口查詢自己的帳單明細。被抓到接口地址,然后隨便改動下參數,豈不是就能隨意刪除別人的文章或者得到別人的帳單明細了。通常接口簽名,就是在接口請求時加上一條簽名參數,來讓后臺識別“身份“。
1.0 最簡單的, 直接帶上密鑰
一些接口資源網站,對于免費用戶就提供了這種簽名方式。要求每次請求數據時帶上預先提供的密鑰。比如 www.testapi.com/date/list/json,在請求時參數里加上 sign=iamlilei。這種方式是相當LOW的,防御力相當于0。提供接口的人根本就沒打算安全驗證,加上簽名只是為了方便統計接口使用次數以方便計費。

2.0 升級版, 隱藏id,改用token
最開始說了,如果是刪除內容的接口,參數中就肯定有文章編號,用戶身份的標識。如果使用id這種數字形式的參數,很容易被冒用。但是如果給用戶創造一個復雜的名字,比如’asdfWEkKjH788J’這種字母加數字加大小寫加特殊字符的形式,相信沒人猜得出規律了。即使被人抓到接口地址,他也改不了其它用戶的數據。但是有些資源類的接口,比如獲取最新新聞,最新天氣等,這類接口就不存在身份了,怎么防止別人免費使用你的接口呢!

3.0 定時更新token
用戶身份是固定的,但token是可以經常更新,簽名是和用戶身份綁定的,請求時也要帶上。這樣別人無法掌握你最新的密鑰,自然也無法使用了。目前,這種簽名是最普遍的,比如微信公眾號各種認證都是用的這種方式。

4.0 加密簽名
通常我們做到第三步,效率高,安全度也可以。但是,非要找一個不會被冒用接口的方法。肯定也是有的,就是加密簽名。首先,服務端提供給客服端一串密鑰,類似token.請求接口時,我們不發送token,而是先把token與當前時間戳拼接并使用md5等固定的算法加密成sign參數,然后把時間戳與sign添加到請求參數里。這樣服務收到請求后,同樣把用戶對應的token和時間戳拼接再加密,最后做判斷是否一致。當然,時間戳肯定是有時效的,可以設置成3秒。使用這樣的方式,不透露密鑰,不透露加密算法,是很難被冒用的。

總結
學術的東西,沒有最好,只有更好。具體使用哪種方式還需要針對具體的場景。如果只是在后端使用可以使用最簡單的方式。但是涉及到用戶數據,那就要防范了。