開放接口簽名設(shè)計openAPI的token鑒權(quán)

安全性考慮:

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&param1=a&param2&timestamp=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比對,是否一致。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容