安全性考慮:
1. 用戶身份校驗
2. 防重放攻擊
3. 防參數(shù)篡改
?請求接口加公共校驗參數(shù):
| 參數(shù) 作用|
| --- | --- |
| token | 授權(quán)給用戶的唯一標(biāo)識? |
| timestamp | 時間戳? |
| nonce | 隨機(jī)數(shù)? |
| sign | 簽名 |
校驗流程
申請token
由服務(wù)方提供給用戶身份的唯一標(biāo)識token和配對的秘鑰secret,token用于識別用戶身份,secret用于加密接口的參數(shù),計算sign值
sign值計算方式
get請求
* 原始請求參數(shù)param1,param2...加上公共參數(shù)token、timestamp(當(dāng)前時間)、nonce(隨機(jī)數(shù))進(jìn)行自然排序,并以kv格式拼成參數(shù)字符串s:nonce=2222¶m1=a¶m2×tamp=1111111&token=token
* 用secret對s進(jìn)行進(jìn)行hmac-sha1加密得到字符串上s2(加密方式可以自選)
* 對s2進(jìn)程base64編碼得的sign
post請求
* 將URL參數(shù)和表單參數(shù)去除sign后按key進(jìn)行字典升序排序,以k=v格式用&連接拼成字符s1
* body中數(shù)據(jù)的MD5值s2(無body用空字符串)組裝簽名字符串s
* 簽名字符串s=請求方法(大寫)+"\n"+s1+"\n"+s2對s加密得到sign
? 用密鑰secret進(jìn)行hmac-sha1加密得到sign1對sign1進(jìn)行base64編碼得到sign(加密方式可以自選)
請求方
原始url加上公共參數(shù),計算sign值,再將sign值添加到url參數(shù)中,發(fā)送請求
服務(wù)方
* 校驗時間戳是否過期
* 校驗時間戳內(nèi)的隨機(jī)數(shù)是都過期(可用redis記錄時間戳內(nèi)被使用過的隨機(jī)數(shù),防重放攻擊)
* 校驗token是否有效
* 根據(jù)sign計算規(guī)則計算sign值并與請求中的sign比對,是否一致。