api使用簽名+時間戳鑒權 請求api接口格式:/api/testserver?appid=xxx&sign=12AA12SD123SD1DSSA×tamp=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×tamp=1511332935¬ice=2332&userId=100
服務端驗證邏輯:
先驗證appid是否合法(不合法傳回400),時間戳是否有效(過期傳回400),緩存中sign對應的notice是否存在(如果存在代表重複送出,如果不存在将sign和notice存入緩存。),再驗證sign時候正确(不正确傳回400)
簽名生成與校驗移步:點選打開連結