公共平臺API鑑權安全驗證

api使用簽名+時間戳鑑權
請求api接口格式:/api/testserver?appid=xxx&sign=12AA12SD123SD1DSSA&timestamp=1511332935&key1=value1&key2=value2...

參數解釋:
appid: 由服務端分配唯一標示id 必傳 確認訪問身份
timestamp:當前時間戳 必傳 確保訪問實效性(10位的秒級時間戳)
sign:簽名 必傳 驗證接口安全防止被劫持修改參數

notice:隨機數                          必傳 防止接口重複提交



簽名生成規則:
所有請求參數(包括appid,時間戳,隨機數   )根據key值的字母升序排序後,以key1value1key2value2。。。的方式連接在最後加上secretKey(由服務端分配唯一的加密參數,ps:不參與通信)組成的字符串
使用MD5加密轉爲大寫得到sign(簽名)

因爲secretKey在求情過程中不參與通信,服務端通過對sign的 校驗就可以防止接口被劫持修改參數,再加上時間戳保證接口的實效性。

服務端驗證簽名和時間戳有效後,將sign和notice存入緩存。


請求實例:
如要請求的api爲 /api/getUserWalletInfo
api需要傳的參數爲:userId

step1:生成時間戳 String timestamp= String.valueOf(new Date().getTime() / 1000); // 當前時間的時間戳
step2: 根據參數生成sign
String sb= appidxxxtimestamp1511332935userId1000secretKey
然後對sb進行md5加密轉爲大寫 得到sign
step3:組合訪問參數進行http請求:/api/getUserWalletInfo?appid=xxx&sign=12AA12SD123SD1DSSA&timestamp=1511332935&notice=2332&userId=100


服務端驗證邏輯:

先驗證appid是否合法(不合法返回400),時間戳是否有效(過期返回400),緩存中sign對應的notice是否存在(如果存在代表重複提交,如果不存在將sign和notice存入緩存。),再驗證sign時候正確(不正確返回400)


簽名生成與校驗移步點擊打開鏈接







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章