書籍購買地址:京東 當(dāng)當(dāng) 天貓
API接口設(shè)計系列文章
-
Android開發(fā)規(guī)范:API接口安全設(shè)計規(guī)范
-
Android開發(fā)規(guī)范:API接口通用設(shè)計規(guī)范
文章目錄
-
- 防篡改
-
防重放
-
Https
APP的數(shù)據(jù)來源就是API接口,所以API接口對于APP的意義來說不言而喻。
設(shè)計API接口最重要的考慮點就是安全機(jī)制。
我們這邊將從三個方面來考慮怎么設(shè)計一個安全的API接口。
防篡改
防篡改就是防止請求的URL參數(shù)值發(fā)送至服務(wù)器的時候被改動。
普通的API接口格式是xxx.html?key1=xx?key2=xx?key3=xx。
我們采用 sign 簽名方式保證數(shù)據(jù)傳輸?shù)恼_性。
我們的app一般會在公司的后臺申請一個appKey和appSecret,這兩個是一一對應(yīng)的。
appKey我們會作為一個參數(shù)寫在URL中,發(fā)送至服務(wù)器。
appSecret則用于參與生成sign的計算。
sign算法需要足夠復(fù)雜,最好有一套自己的簽名算法,不是外界公開的;
一般采用安全散列算法實現(xiàn),比如SHA1。
sign也要作為一個參數(shù)添加到URL中,和appKey一并發(fā)送至服務(wù)器。
如:xxx.html?appKey=xx?sign=xx?key1=xx?key2=xx?key3=xx。
服務(wù)器收到請求后,會通過appKey查到對應(yīng)的appSecret,然后通過同樣的散列算法,得到一個sign,然后比較一下兩個sign是否相等。如果不相等則數(shù)據(jù)找到篡改,廢棄這條請求。
另外,關(guān)于appSecret有兩種使用方式:
-
appSecret直接寫死在客戶端代碼中,這樣直接獲取調(diào)用即可。
-
appSecret還可以通過一個專門的接口getSign從后臺獲取。
這種情況需要用戶首先登錄成功后,服務(wù)器返回一個accessToken,然后調(diào)用appSecret接口需要帶上這個accessToken參數(shù)。
防重放
解決了數(shù)據(jù)被篡改的問題,還有一個問題就是如果一條正常的請求數(shù)據(jù)被人獲取到了,從而進(jìn)行二次甚至多次請求怎么辦?
我們這邊可以使用nonce + timestamp的解決方案。
- nonce
nonce就是一個隨機(jī)數(shù),由客戶端生成,每次請求將隨機(jī)數(shù)作為一個參數(shù)發(fā)送給服務(wù)器。
服務(wù)器會在數(shù)據(jù)庫里查詢是否有這個nonce,如果沒有則是一條新的請求,進(jìn)行正常處理;
如果能查到已經(jīng)存在這個nonce,則廢棄這條請求。
nonce可以通過UUID.randomUUID().toString()來生成。
有個問題就是這個nonce在數(shù)據(jù)庫中隨著請求量的增大而導(dǎo)致數(shù)據(jù)量會越來越大。
解決這個問題我們可以采用timestamp時間戳的方式。
2. timestamp
時間戳是服務(wù)器給URL請求設(shè)定的一個有限時間范圍起點。
比如服務(wù)器認(rèn)為客戶端發(fā)送帶過來的timestamp與服務(wù)器的當(dāng)前時間戳在10分鐘之內(nèi),則認(rèn)為這條請求是有效的。超過了10分鐘則廢棄這條請求。
如果10分鐘內(nèi)的請求,需要在數(shù)據(jù)庫中查詢nonce是否有記錄,如果有記錄這廢棄這條請求;
如果沒有記錄,則記錄這個nonce,并且將超過10分鐘的nonce全部刪除。
關(guān)于這個timestamp獲取的問題,同樣需要從服務(wù)器獲取,不然客戶端怎么知道服務(wù)器的起點計算時間呢?
先自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)初中級Android工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但對于培訓(xùn)機(jī)構(gòu)動則近萬的學(xué)費,著實壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《Android移動開發(fā)全套學(xué)習(xí)資料》送給大家,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負(fù)擔(dān)。
由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻
如果你覺得這些內(nèi)容對你有幫助,可以掃碼領(lǐng)取?。。?!

最后是今天給大家分享的一些獨家干貨:
【Android開發(fā)核心知識點筆記】
【Android思維腦圖(技能樹)】
【Android核心高級技術(shù)PDF文檔,BAT大廠面試真題解析】
【Android高級架構(gòu)視頻學(xué)習(xí)資源】
《Android學(xué)習(xí)筆記總結(jié)+移動架構(gòu)視頻+大廠面試真題+項目實戰(zhàn)源碼》,點擊傳送門,即可免費領(lǐng)?。?/strong>文章來源地址http://www.zghlxwxcb.cn/news/detail-845656.html
[外鏈圖片轉(zhuǎn)存中…(img-1dNMowQE-1711231877857)]文章來源:http://www.zghlxwxcb.cn/news/detail-845656.html
【Android高級架構(gòu)視頻學(xué)習(xí)資源】
《Android學(xué)習(xí)筆記總結(jié)+移動架構(gòu)視頻+大廠面試真題+項目實戰(zhàn)源碼》,點擊傳送門,即可免費領(lǐng)??!
到了這里,關(guān)于Android開發(fā)規(guī)范:API接口安全設(shè)計規(guī)范的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!