API接口安全性設(shè)計(jì)

API接口安全性設(shè)計(jì) 接口的安全性主要圍繞Token、Timestamp和Sign三個(gè)機(jī)制展開設(shè)計(jì),保證接口的數(shù)據(jù)不會(huì)被篡改和重復(fù)調(diào)用,下面具體來看:

Token授權(quán)機(jī)制:用戶使用用戶名密碼登錄后服務(wù)器給客戶端返回一個(gè)Token(通常是UUID),并將Token-UserId以鍵值對(duì)的形式存放在緩存服務(wù)器中。服務(wù)端接收到請(qǐng)求后進(jìn)行Token驗(yàn)證,如果Token不存在,說明請(qǐng)求無效。

關(guān)于token的說明:為不重復(fù)的字符串(一般為UUID),然后在Redis(任意緩存服務(wù)器)中維護(hù)Token—-Uid的用戶信息關(guān)系,以便其他api對(duì)token的校驗(yàn)

時(shí)間戳超時(shí)機(jī)制:用戶每次請(qǐng)求都帶上當(dāng)前時(shí)間的時(shí)間戳timestamp,服務(wù)端接收到timestamp后跟當(dāng)前時(shí)間進(jìn)行比對(duì),如果時(shí)間差大于一定時(shí)間(比如5分鐘),則認(rèn)為該請(qǐng)求失效,這個(gè)時(shí)間要保證足夠完成本次請(qǐng)求的同時(shí)盡量短,可以減少緩存服務(wù)器的壓力(見簽名機(jī)制)。

簽名機(jī)制:將Token和時(shí)間戳加上其他請(qǐng)求參數(shù)就行MD5或SHA-1算法(可根據(jù)情況加點(diǎn)鹽)加密,加密后的數(shù)據(jù)為本次請(qǐng)求的簽名sign,并將該簽名存放到緩存服務(wù)器中,超時(shí)時(shí)間設(shè)定為跟時(shí)間戳的超時(shí)時(shí)間一致(這就是為什么要盡量短,二者時(shí)間一致可以保證無論在timestamp規(guī)定時(shí)間內(nèi)還是外本URL都只能訪問一次)。服務(wù)端接收到請(qǐng)求后以同樣的算法得到簽名,并跟當(dāng)前的簽名進(jìn)行比對(duì),如果不一樣,說明參數(shù)被更改過,直接返回錯(cuò)誤標(biāo)識(shí)。同一個(gè)簽名只能使用一次,如果發(fā)現(xiàn)緩存服務(wù)器中已經(jīng)存在了本次簽名,則拒絕服務(wù)。

整個(gè)流程如下:

1、客戶端通過用戶名密碼登錄服務(wù)器并獲取Token

2、客戶端生成時(shí)間戳timestamp,并將timestamp作為其中一個(gè)參數(shù)

3、客戶端將所有的參數(shù),包括Token和timestamp按照自己的算法進(jìn)行排序加密得到簽名sign

4、將token、timestamp和sign作為請(qǐng)求時(shí)必須攜帶的參數(shù)加在每個(gè)請(qǐng)求的URL后邊(http://url/request?token=123&timestamp=123&sign=123123123)

5、服務(wù)端寫一個(gè)過濾器對(duì)token、timestamp和sign進(jìn)行驗(yàn)證,只有三個(gè)參數(shù)都正確且在規(guī)定時(shí)間內(nèi),本次請(qǐng)求才有效 在以上三中機(jī)制的保護(hù)下,

如果黑客劫持了請(qǐng)求,并對(duì)請(qǐng)求中的參數(shù)進(jìn)行了修改,簽名就無法通過;

如果黑客使用已經(jīng)劫持的URL進(jìn)行DOS攻擊,服務(wù)器則會(huì)因?yàn)榫彺娣?wù)器中已經(jīng)存在簽名而拒絕服務(wù),所以DOS攻擊也是不可能的;

如果黑客隔一段時(shí)間進(jìn)行一次DOS攻擊(假如這個(gè)時(shí)間大于簽名在緩存服務(wù)器中的緩存時(shí)長(zhǎng)),則會(huì)因?yàn)闀r(shí)間戳超時(shí)而無法完成請(qǐng)求,這就是為什么簽名的緩存時(shí)長(zhǎng)要跟時(shí)間戳的超時(shí)時(shí)長(zhǎng)一樣。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 方案一 (客戶端token方式)客戶端生成token傳給服務(wù)端校驗(yàn),一致就通過用戶驗(yàn)證。 通過時(shí)間戳+用戶唯一標(biāo)識(shí)...
    RobinYu閱讀 2,234評(píng)論 0 1
  • 題外話: 有人說:就算是https加密加API接口加密黑客照樣可以攻擊你,小公司沒必要浪費(fèi)這個(gè)精力去考慮這個(gè)問題,...
    樹懶啊樹懶閱讀 2,259評(píng)論 0 7
  • 9. — 番外 — /兩個(gè)半月后 “看來我們很受大家喜愛呢!”你看著馬克說?!澳钱?dāng)然,男方這么帥,女方是個(gè)大美女,...
    沙特阿菠蘿閱讀 357評(píng)論 0 1
  • 阿靈飄浮在空中,參天大樹從身體兩邊往后慢慢移動(dòng)?!拔沂窃陲w嗎?”阿靈伸開手腳像魚兒一樣劃動(dòng)著,真的加速了不少...
    風(fēng)陌停下閱讀 223評(píng)論 0 0

友情鏈接更多精彩內(nèi)容