前面講過:移動端與PHP服務端接口通訊流程設計(基礎版)api
對於 api_token 的校驗,其安全性還可再加強:安全
加強地方一:dom
再增長2張表,一個接口表,一個受權表,設計參考以下:ide
接口表加密
字段名 | 字段類型 | 註釋 |
api_id | int | 接口ID |
api_name | varchar(120) | 接口名,以"/"做爲分割線,如 blog/Index/addBlog |
api_domain | varchar(255) | 所屬領域 |
is_enable | tinyiny(1) | 1可用,0不可用 |
add_time | int | 添加時間 |
(注:只列出了核心字段,其它的再擴展吧!!!)設計
受權表對象
字段名 | 字段類型 | 註釋 |
client_id | int | 客戶端ID |
api_id | int | api編號 |
api_name | varchar(120) | |
is_enabled | tinyint(1) | 是否可用 1:可用 0:不可用 |
add_time | int | 添加時間(戳) |
expire_time | int | 過時時間(戳) |
(注:只列出了核心字段,其它的再擴展吧!!!)blog
執行過程以下:token
一、移動端與服務端生成的 api_token 進行對比,若是不相等,則直接返回錯誤,不然,進入下一步;接口
二、根據接口URL,組裝 api_name,再加上客戶端傳回的 client_id 爲參數,查找 「受權表」記錄,若是記錄存在,且有效(是否可用,是否過時),則表示權限驗證經過,返回接口數據,不然返回錯誤信息;
加強地方二:
對於一些很特殊的接口,怎麼特殊,哪些算特殊,我也不知道,總而言之,就是感受http請求有可能被劫取,傳遞參數有可能被竄改等狀況,仍是舉個例子來講吧:
有個直接轉帳接口,頁面上 我輸入的是5元,表示我要給對方某某轉帳5元,結果在http傳遞過程當中,被人劫取並竄改爲了 10000元,並且入帳對象改爲了「黑客」的帳號,那不是虧大發了,思考了一下,應該有2種方案解決這個問題,
方案一:走https,這個就很少說,比較公認的安全機制;
方案二:走數字簽名,實現原理以下:
一個http請求,假如須要傳遞以下3個參數
參數名1=參數值1
參數名2=參數值2
參數名3=參數值3
咱們能夠再追加一個參數,該參數的名爲 identity_key (名字是什麼不重要),該參數的值爲 前幾個參數值按順序相加,再加密後的結果。
即:
identity_key = md5('參數值1' + '參數值2' + '參數值3' + '加密密鑰');
因而,最終傳遞的參數有:
參數名1=參數值1
參數名2=參數值2
參數名3=參數值3
client_id=client_id值
identity_key=md5('參數值1' + '參數值2' + '參數值3'+ 'client_id值' + '加密密鑰')
服務端接到參數後,再按相同的加密規則從新生成一份 identity_key,服務端的identity_key和客戶端的identity_key 進行校對,若是不相等,表示被竄改過,接下來怎麼操做,本身看着辦吧!