為什么要參數(shù)簽名
- 保證接口的數(shù)據(jù)不會被篡改和重復調(diào)用
原理
- 調(diào)用端對參數(shù)進行加密,服務端也對參數(shù)后加密后與調(diào)用端加密結果對比
- 加密算法:兩端約定好加密算法,加密算法需加鹽,通過參數(shù)排序、拼接秘鑰、MD5等方式進行加密
- 秘鑰對:服務端對每個調(diào)用端生成appKey和appSecret,appSecret為隱秘信息,調(diào)用端本地存儲。
調(diào)用端
- 預先獲取:appKey、appSecret
- 調(diào)用:
傳參:appKey、timestamp(毫秒時間戳,5秒過期, 防止dos攻擊)、業(yè)務參數(shù)、簽名
簽名算法:
1. 對參數(shù)按照ASCII碼表進行排序,得到結果:num: 10, nickName: 小泡芙, username:張三
2. 拼接排序后的字段進行拼接,得到結果:s1 = num10nickName小泡芙username張三
3. 在拼接好的字符串后加上appSecret,得到結果:s2 = secret + s1 + secret
4. 最后使用md5算法:md5(s2)
請求參數(shù)示例, 注意:沒有傳appSecret:
{
"nickName": "小泡芙",
"username": "張三",
"num": 10,
"appKey": "App-3782917398173123-32223",
"timestamp": "2022-10-14 15:53:23",
"sign": "ajhkd123dh8902381273823"
}
-
流程圖
image.png
接收端
- 接收參數(shù):
- 驗簽:
1. 校驗時間戳(防止抓取數(shù)據(jù)后惡意高頻訪問),判斷時間戳是否過期
2. 校驗appSecret:獲取appSecret,判斷是否過期
3. 校驗簽名:走簽名算法生成簽名(需要把簽名先從參數(shù)表移出來),與接收簽名對比。 -
流程圖:
image.png

