目錄
簽名接口
在寫開放的API接口時是如何保證數據的安全性的?先來看看有哪些安全性問題在開放的api接口中,我們通過http Post或者Get方式請求服務器的時候,會面臨着許多的安全性問題,例如:
- 請求來源(身份)是否合法?
- 請求參數被篡改?
- 請求的唯一性(不可復制)
為了保證數據在通信時的安全性,我們可以采用參數簽名的方式來進行相關驗證。
那postman中怎么校驗這種類型的接口呢?
這個url接口,來演示一下:
# URL http://www.neeo.cc:6002/pinter/com/userInfo # 類型 POST # 參數 {"phoneNum":"123434","optCode":"testfan","timestamp":"12112121212","sign":"Md5(手機號+鹽 +時間戳)"}
上面的參數中,需要手機號, optCode 字段是個固定值 testfan ,這個別改;時間戳字段 timestamp 是當前的時間 戳, sign 字段是需要一個算法來生成的。
這個接口的簽名算法為:
sign = Md5(手機號+鹽+當前時間戳) # 加號代表拼接
很明顯,這些操作,都要在postman中操作,那么比如獲取時間戳和加密都需要JavaScript來完成,我們先來把用到的知識點列出來:
// 獲取時間戳 var t = new Date().getTime(); // 加密 var md5 = CryptoJS.MD5("需要加密的字符串").toString(); // postman保存變量 pm.environment.set("要保存的變量名", md5)
來看postman中怎么測試。
首先要說的是,參數中的需要的數據,都需要在發送請求之前配置到位,那么在哪處理,又怎么處理呢?
// 1. 處理手機號 phoneNum var myPhone = "18211101111" // 2. 操作碼 optCode var myOptCode = 'testfan' // 3. 時間戳 var myTimeStamp = new Date().getTime(); // 4. 將上面的3個變量拼接起來 var myData = myPhone + myOptCode + myTimeStamp; // 5. 使用md5加密 var mySign = CryptoJS.MD5(myData).toString(); console.log(myOptCode, myTimeStamp, myData, mySign); // 6. 將相關變量添加到postman中 pm.environment.set("myPhone", myPhone); pm.environment.set("myOptCode", myOptCode); pm.environment.set("myTimeStamp", myTimeStamp); pm.environment.set("mySign", mySign);
首先,我們確定了這寫操作要在請求發送之前處理好,那么我們就先將上述整理好的代碼粘貼到合適的位置。
如下圖,在 Pre-request Script 中,編寫代碼。然后在控制台中,看看查打印結果,可以看到,已經加密成功了,說明我們的代碼邏輯沒有問題。

來看原來的參數:
{"phoneNum":"123434","optCode":"testfan","timestamp":"12112121212","sign":"Md5(手機號+鹽 +時間戳)"}
現在, 我們需要將相關的字段替換為我們之前添加到postman中的變量,下面是替換后的json串。
{"phoneNum":"{{myPhone}}","optCode":"{{myOptCode}}","timestamp":" {{myTimeStamp}}","sign":"{{mySign}}"}
然后,我們將替換后的json字符串替換到請求的body中,然后發送請求,查看響應結果。

ok,經過一系列的操作,我們終於將這個簽名接口調通了。
再來看postman如何處理需要攜帶cookie的接口。
先來一個場景,用戶需要登錄某網站,登錄成功,返回一個cookie,然后用戶需要攜帶cookie在進行進一步操作,比如查詢余額等。
我們測試這種類型的接口時,有兩種方式:
- 第一種,就是我們使用瀏覽器登錄,獲取cookie值,然后手動攜帶。
- 第二種,就是借助postman幫我們自動的管理cookie值。
先來看第一種方式。
登錄接口的相關參數:
url: http://www.neeo.cc:6002/pinter/bank/api/login
類型:POST
參數:userName=admin&password=1234
查詢余額接口相關參數:
url: http://www.neeo.cc:6002/pinter/bank/api/query
類型:GET
參數:userName=admin
查詢余額接口必須依賴登錄成功返回的cookie。
首先,我們需要在瀏覽器中訪問 http://www.neeo.cc:6002/pinter/bank/page/login連接,輸入 admin&1234 進行登錄,登錄成功后,我們獲取到了cookie值。


現在,保持登錄狀態,我們使用postman訪問查詢余額接口http://www.neeo.cc:6002/pinter/bank/api/query?userName=admin。

暫時還沒有加cookie,我們查詢余額失敗。現在,我們從瀏覽器中拷貝cookie值,添加到查詢余額的請求頭中,再次訪問。
我們來看第二種:
在postman中,新建一個登錄的接口。

然后,我們在查詢余額接口中,就不用攜帶cookie了,直接訪問即可。

現在,發現,訪問成功了。如上圖,我們打開 Temporary Headers ,發現本次請求,postman自動的幫我們攜帶了cookie,才能訪問成功。
其實,postman自動的幫我門管理了cookie。在哪看呢,點擊上圖中的綠色框中的 Cookies 可以發現那個cookie值。

這里也可以自己添加cookie。
token
這里用到postman的數據管理的功能,該功能對token進行處理。
關鍵步驟:
// 從響應中獲取json數據 var jsonData = pm.response.json(); // 從json中的相應字段提取token var myToken = jsonData.meassage; // 將token值set到postman中,方便后續引用 pm.environment.set("myToken",myToken)
來個場景, 還是登陸后進行后續操作,只是需要攜帶token了。
登錄/查詢余額接口相關參數:
# 登錄 url:http://www.neeo.cc:6002/pinter/bank/api/login2 類型:POST 參數:userName=admin&password=1234 # 查詢余額 url:http://www.neeo.cc:6002/pinter/bank/api/query2 類型:GET 參數:userName=admin
第一種方式,仍然為自己在瀏覽器(建議是用火狐瀏覽器抓包)登錄,然后抓包,抓到token值。

然后再查詢余額中攜帶

現在就OK了。
第二種,就是使用postman的數據關聯的功能了。
首先,我們配置登錄接口,然后從響應的json中提取token,然后將token保存到postman的環境變量中。那在哪寫提取token的代碼呢?還記得 Tests 嗎?它是響應后要干的事情, 之前我們用它來做斷言。現在用它來提取token值。

我們也可以去環境變量中查看剛剛添加的token值。

然后在后續的查詢余額中,引用環境變量中的token值,只要這個token值不過期,我們查詢余額就能一直用,過期 了,再訪問一下登錄接口就行了。

ok,完事了。