簽名生成

api 簽名(sign)設(shè)計文檔

版本 日期 改動說明 審核人 擬定人
V1.0.0 2019-03-20 初步擬定

1、背景

? 1. 在公共網(wǎng)絡(luò)環(huán)境(如: WIFI、非家庭網(wǎng)絡(luò)、非辦公網(wǎng)絡(luò)等)網(wǎng)絡(luò)請求是不安全的,一切基于HTTP協(xié)議的請求/響應(yīng)(Resquest/Response)都是可以背截獲、篡改、重發(fā)的。

? 2. 對外開放的接口安全性要求:防偽裝攻擊、防篡改攻擊、防重發(fā)攻擊

2、實現(xiàn)思路

? 1. app 端根據(jù)用戶請求的唯一憑證 (app_key 或token) 再拼接上請求接口需要的參數(shù),再拼接上時間戳(timestamp) 最終生成MD5編碼,再轉(zhuǎn)化成全部大寫的形式生成簽名(sign)。在請求的app接口的信息中將為一憑證(app_key 或token)和 sign,和時間戳(timestamp)一同提交到服務(wù)。

? 2. 服務(wù)端驗證:

? (1)判斷token 是否有效

? (2)判斷服務(wù)器端根據(jù)規(guī)則生成的sign 和用戶傳過來的sign是否相同

? (3)判斷時間戳(timestamp)是否在有效期內(nèi)

3、設(shè)計方案

簽名算法過程:

? 1.對除簽名外的所有請求參數(shù)按key做的升序排列,value無需編碼。 (假設(shè)當(dāng)前時間的時間戳是12345678)

? 例如:有c=3,b=2,a=1 三個參,另加上時間戳后, 按key排序后為:a=1,b=2,c=3,_timestamp=12345678。

? 2 .把參數(shù)名和參數(shù)值連接成字符串,得到拼裝字符:a1b2c3_timestamp12345678

? 3. 用申請到的token 連接到接拼裝字符串頭部,然后進行32位MD5加密,最后將到得MD5加密摘要轉(zhuǎn)化成大寫。

? 示例:假設(shè)token=test,md5(testa1b2c3_timestamp12345678),取得MD5摘要值 C5F3EB5D7DC2748AED89E90AF00081E6

python代碼實現(xiàn)

?

In [20]: def md5(content): 
    ...:     if isinstance(content, str): 
    ...:         content = content.encode("utf-8") 
    ...:     hash = hashlib.md5() 
    ...:     hash.update(content) 
    ...:     return hash.hexdigest()


parame_dict = {'token': 'test', 
               'invoice_i':'af5b769c9ba5456306468e61719a09ca', 
               'timestamp': 123456789} 
token = parame_dict.pop('token') 
sign_str = token + ''.join([str(item[0])+str(item[1]) for item in sorted(parame_dict.items(), key=lambda d: d[0])]) 
sign = md5(sign_str).upper() 
print(sign)
'CA116DE1DC8B33B7A73E0A1CF99CD92B'

4、app端使用方法

?

? 1、根據(jù)規(guī)則生成sign

? 2、參數(shù)傳遞方式

? sign 放在http請求的header中

?

key value 是否必填
sign CA116DE1DC8B33B7A73E0A1CF99CD92B

? token、timestamp 放在http請求的body中

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

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