web API 接口筆記4 - Postman變量和session、token_第1頁
web API 接口筆記4 - Postman變量和session、token_第2頁
web API 接口筆記4 - Postman變量和session、token_第3頁
web API 接口筆記4 - Postman變量和session、token_第4頁
web API 接口筆記4 - Postman變量和session、token_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、使用變量打開postman前面課程的例子中,我們request URL 里面的主機(jī)地址一直都是用的 localhost,表示本機(jī),因?yàn)槲覀兊姆?wù)程序就運(yùn)行在本機(jī)上。 而實(shí)際的測試過程中, 服務(wù)器地址往往并非是在本機(jī)上的。比如,我們在實(shí)驗(yàn)室里面,可能就是某個IP地址,比如33之類。我們在測試的時候,就需要改。如果后來,再切換到本機(jī)上測試。還得再改回來localhost??梢允褂肞ostman中的變量什么是Postman中的變量? 在Postman中變量的概念和 編程語言是類似的。Postman中的變量也就是一個字符串標(biāo)識,用來對應(yīng)一個值(在Postman中通常是一個字符串)

2、。 如果Postman 的API中多處使用某個字符串的時候,有可能發(fā)生變化,我們可以使用變量代表它。 這樣如果另外一個測試環(huán)境 中該值需要修改,我們只要修改這個變量的定義一個地方就可以了。Postman的變量主要分兩種類型。一個是 環(huán)境里面的變量另一個是 全局變量Postman 環(huán)境里面的變量首先我們得明白Postman有個概念 叫 環(huán)境, 對應(yīng)測試環(huán)境postman支持多個 測試環(huán)境一個環(huán)境里面可以配置多個變量。這個變量通常是針對某個測試環(huán)境而言的。比如 服務(wù)器地址, 端口號 等。如果我們實(shí)際有多套測試環(huán)境(實(shí)驗(yàn)室中有多臺測試服務(wù)器,作為測試環(huán)境),可以為這些不同的測試環(huán)境, 設(shè)置相應(yīng)的Po

3、stman環(huán)境。每個環(huán)境里面有相同名稱的變量例如: env1: var1: hello var2: 1234 var3: localhost env2: var1: hello2 var2: 1235 var3: 這樣我們從一個環(huán)境切換到另一個環(huán)境的時候, 只需要選擇不同的Postman環(huán)境就可以了。我們不同環(huán)境的中API執(zhí)行的時候, 就會根據(jù)當(dāng)前是哪個環(huán)境而決定采用什么樣的變量值舉個例子,我們?nèi)绻罱藘商追?wù)器環(huán)境,里面各自運(yùn)行了我們的教學(xué)管理系統(tǒng)。一臺在本機(jī)上,另一臺在實(shí)驗(yàn)室里面,ip地址為00我們就可以創(chuàng)建兩套Postman環(huán)境,里面都設(shè)置一

4、個名為apiserver的變量在Postman中創(chuàng)建環(huán)境如下,點(diǎn)擊界面右上角的這個齒輪圖標(biāo),選擇Manage Environments在彈出對話框中,點(diǎn)擊Add按鈕。 在如下所示的對話框中填入環(huán)境名稱 本機(jī),和這個環(huán)境中所包含的變量。這里我們就填入一個變量serverip 表示API服務(wù)器的主機(jī)名或者IP地址最后點(diǎn)擊右下角的Add按鈕,確定添加。這樣一套環(huán)境就創(chuàng)建了。我們?nèi)绶ㄅ谥疲賱?chuàng)建一套環(huán)境對應(yīng)實(shí)驗(yàn)室的那臺服務(wù)器,環(huán)境名稱為實(shí)驗(yàn)室,如下所示:這樣,我們就有了兩套環(huán)境,一套叫l(wèi)ocal,另一套叫 lab-現(xiàn)在,我們只是創(chuàng)建了環(huán)境,和環(huán)境里面的變量。要想這個方案有效,我們還要到我們的Postm

5、an API 請求中,將所有請求的url中的主機(jī)名,替換為變量名server。應(yīng)該像下面這樣就是將原來的localhost替換為server 。 這里面用雙花括號將變量名括起來。雙花括號就表示里面是一個變量當(dāng)我們進(jìn)行測試的時候,如果現(xiàn)在是使用本機(jī)的API服務(wù),就在這里選擇local 環(huán)境,如果是使用的實(shí)驗(yàn)室的那臺機(jī)器, 就選擇server1環(huán)境。Postman會使用不同環(huán)境里面的變量對應(yīng)的值。Postman 全局里面的變量有的時候,有些變量,我們可能并不需要配置到很多套環(huán)境里面。因?yàn)榛旧线@就是一個固定的值,要修改的話,所有的環(huán)境里面都要修改。比如,我們要添加的課程信息name:初中化學(xué),de

6、sc:初中化學(xué)課程,display_idx:4這個信息,對于不同版本系統(tǒng)(比如廣州版本和北京版本,上海版本)的測試,值會有變化但是和測試環(huán)境沒有關(guān)系不管是實(shí)驗(yàn)室機(jī)器,還是我們自己的本機(jī)環(huán)境, 需要的值都是一樣的,并不會變化。 大家想想是不是。這時候,我們沒有必要創(chuàng)建變量到環(huán)境中。這時候,我們可以創(chuàng)建一個全局變量。全局變量和我們選擇的環(huán)境無關(guān)。點(diǎn)擊界面右上角的這個齒輪圖標(biāo),選擇Manage Environments在彈出對話框中,點(diǎn)擊Globals按鈕,如下所示。然后加入全局變量名 course_add 其內(nèi)容如下所示別忘了 打鉤,不然不會使用這個全局變量然后,我們再打開 添加課程的API請求,

7、修改其內(nèi)容如下這樣,就將data參數(shù)的值用變量取代了。http抓包客戶端是瀏覽器客戶端如果是瀏覽器,我們通常可以利用瀏覽器本身的開發(fā)者工具來抓包,操作一下chrome瀏覽器-如果使用fidder ,我們需要指定瀏覽器的代理。以谷歌瀏覽器為例,進(jìn)入設(shè)置-高級,點(diǎn)擊下面按鈕進(jìn)入高級,確保下面中 沒有禁止抓 localhost, 開頭的包。就是空白即可瀏覽器訪問 網(wǎng)址http:/localhost/mgr/login/login.html發(fā)現(xiàn)可以抓包了??蛻舳耸鞘謾C(jī)需要在手機(jī)上設(shè)置代理。以note2 為例,演示如何長按鏈接的WiFi時,設(shè)置代理。要注意wifi 和 運(yùn)行postma

8、n的機(jī)器必須是同一個網(wǎng)絡(luò)環(huán)境 填入fiddler所在機(jī)器的 IP地址(查看一下IP地址)蘋果手機(jī)的代理設(shè)置也是大同小異,大家可以網(wǎng)上搜索我們還需要設(shè)置一下fidder, 允許遠(yuǎn)程機(jī)器連接自己 -上面都配置好了以后,我們就可以訪問網(wǎng)站,查看抓包結(jié)果了。手機(jī)瀏覽網(wǎng)頁的時候,我們可以打開手機(jī)瀏覽器, 地址欄輸入02/mgr/login/login.html cookie 和 session 的概念做web api測試的時候,大家可能會接觸到cookie 和session的概念。-cookie 是我們在訪問一個網(wǎng)站時,通常由網(wǎng)站服務(wù)器返回的一種標(biāo)記為cookie類型數(shù)

9、據(jù) 要求我們存儲在瀏覽器所在電腦上 以后每次訪問本網(wǎng)站,瀏覽器都會在http請求中將該數(shù)據(jù)發(fā)送過來-l 用戶登錄的時候, 提供、密碼用戶(張三)登錄的時候提供用戶名密碼服務(wù)端認(rèn)證通過后,這次登錄 后續(xù)所有的 客戶端和服務(wù)端的消息交互 都稱之為屬于一次會話(session ,session的中文意思就是會話)中進(jìn)行。 session在我們軟件通信中是個非常廣泛的概念。 它英文是一個會話的意思,會話,就像現(xiàn)實(shí)世界中的會話概念, 概念引申下來,到軟件通訊中,通訊雙方一次交流也叫會話,這次交流中的每次消息交互都屬于這次會話session。比如 用戶張三某次登錄后, 服務(wù)端就會認(rèn)為創(chuàng)建了一個會話sess

10、ion。所有的前端瀏覽器和后端服務(wù)器 每次的http消息交互都屬于這個session。那么別的用戶(王二麻子)登錄呢? 那就是另一個session B,它后續(xù)的所有消息交互,都屬于session B-就像現(xiàn)實(shí)世界中的會話需要名字來唯一標(biāo)識一樣,web服務(wù)的會話也需要一個名字來標(biāo)記為了標(biāo)志不同的會話 ,服務(wù)端后面生成 一個叫sessionid的東西(就是一串字符,比如1234556),標(biāo)志這次登錄的所有后續(xù)http消息交互,sessionid通常 保存在數(shù)據(jù)庫中,并且對應(yīng)可以存儲該sessionid的一系列信息:比如 用戶名、用戶權(quán)限等,類似如下cf434534abc234sdfsd : use

11、rid:22, username: jcy, login:20170419 11:22:20 .另外一次登錄,就另外產(chǎn)生記錄cf324abc234sdfsd : userid:25, username: sdfy, login:20170419 11:22:20 .并且將產(chǎn)生的sessionid 返回給客戶端怎么返回?通過http響應(yīng)里面Set-Cookie頭部要求瀏覽器保存到cookie中。cookie 是瀏覽器用來存儲對應(yīng)該網(wǎng)站信息的一個 客戶端的存儲空間。隨后,客戶端每次訪問同一個網(wǎng)站,的http請求都會將該cookie 里面的內(nèi)容 放到http頭部中sessionid當(dāng)然也在里面-所以

12、服務(wù)端根據(jù)sessionid,如果到表中能夠查到相應(yīng)的 記錄,就知道了 對應(yīng)的是哪個用戶那次登錄 。 -session 通常用在 web應(yīng)用中, 就是瀏覽器里面的網(wǎng)頁應(yīng)用。作為一種驗(yàn)證用戶權(quán)限的機(jī)制:因?yàn)楦鶕?jù)sessionid 就可以知道是哪個用戶, 從而能夠知道該用戶是否有相應(yīng)的權(quán)限訪問相應(yīng)的資源。比如我們 列出課程的API請求, 通過sessionid 知道是auto用戶,是管理員用戶從而可以知道它的權(quán)限。-可能有的同學(xué)感到奇怪,為什么我們的教管系統(tǒng)不需要登錄也能直接使用 postman API 請求直接列出資源呢?那是因?yàn)椋?我為了方便 教學(xué)前面的基礎(chǔ)概念,修改了服務(wù)代碼,故意將sess

13、ionid的校驗(yàn)步驟 跳過去了。如果我們修改配置文件backendprojectsettings_common.py最后一行改為CHECK_USER_FOR_CALL = True用postman 再執(zhí)行,就會發(fā)現(xiàn) redirect: /mgr/login/login.html, reason: 未登錄, retcode: 302因?yàn)闆]有sessionid,假如,我拷貝了瀏覽器里面的sessionid,放入到請求頭中,Cookie:sessionid=4zris920v7hzpugdcuqne2j5dtlc2uqq再試一次,就可以了如果自動化系統(tǒng)需要你們做登錄, 可以用postman模擬登錄請

14、求,獲取sessionid登錄接口如下:/jcyrss/songqin-testdev/blob/master/webapi/doc/login.mdpostman這樣設(shè)置查看響應(yīng)里面有cookiepostman 發(fā)送請求的響應(yīng)里面有cookies,就會自動保存下來。點(diǎn)擊這里查看-session的目的 之一就是 驗(yàn)證用戶,從而可以驗(yàn)證用戶權(quán)限通過sessionid 來驗(yàn)證用戶 有一個弊端: 通常存儲在數(shù)據(jù)庫中這樣,客戶端請求來的時候, 服務(wù)端 需要 根據(jù)sessionid來查看數(shù)據(jù)庫里面的用戶信息。問題2: 服務(wù)端訪問數(shù)據(jù)存儲, 性能上會有損耗數(shù)據(jù)訪問通常是后

15、端服務(wù)的最大瓶頸之一。特別是數(shù)量巨大的時候。問題1: 服務(wù)端需要存儲額外信息, 增加了業(yè)務(wù)的復(fù)雜性。特別是數(shù)量巨大的時候,需要水平擴(kuò)容數(shù)據(jù)庫,就是增加多個數(shù)據(jù)庫服務(wù)節(jié)點(diǎn), 業(yè)務(wù)邏輯有時候需要判斷數(shù)據(jù)存在哪個數(shù)據(jù)庫上-token的概念首先,大家簡單理解一下什么是token 。 簡單說,token 是 包含 數(shù)據(jù)信息和 驗(yàn)證信息 的一串字節(jié)數(shù)據(jù)而token 是 你們公司的 業(yè)務(wù) 服務(wù)器 生成的,生成的token 包含了將來要查看使用的數(shù)據(jù)信息, 比如用戶名、用戶等級等-token包含了 別人無法偽造的驗(yàn)證數(shù)據(jù),可以用來 驗(yàn)證你這個token 是否是我這個 業(yè)務(wù)服務(wù)生成的。這個驗(yàn)證信息 是在 生成t

16、oken 的時候,通過算法產(chǎn)生的。這個算法是某個hash算法,稱之為HMAC算法(Hash-based Message Authentication Code),這個算法就是根據(jù)源數(shù)據(jù)產(chǎn)生校驗(yàn)碼一樣的數(shù)據(jù)校驗(yàn)碼比源數(shù)據(jù)小得多,比如iso從4G到20個字節(jié)的校驗(yàn)碼最神奇的是, 只要數(shù)據(jù)信息有一點(diǎn)修改, 對應(yīng)的驗(yàn)證信息都會改變。比如iso下載有一個byte錯了,校驗(yàn)碼就會不同-這種算法用在我們token方案里面,在生成驗(yàn)證信息的時候, 輸入數(shù)據(jù)信息 前面加上一個密鑰。 如下所示HmacFunc(密鑰 + data )= HMAC這個data就是我們源數(shù)據(jù), 比如用戶名、用戶等級之類的。 而最終的H

17、MAC就是校驗(yàn)信息, 我們可以簡稱校驗(yàn)碼-這個data就是我們源數(shù)據(jù), 比如用戶名、用戶等級之類的。如果用戶抓包,發(fā)現(xiàn)了token里面的用戶等級是白銀用戶,他改為鉆石用戶,大家想我們服務(wù)端系統(tǒng)能否發(fā)現(xiàn)?對了驗(yàn)證信息HMAC就不對了。-有人說,這個HmacFunc 算法是公開的,我用這個算法寫段程序算出修改等級后的HMAC,不就行了嗎?他沒有密鑰, 也無法算出我們一致的驗(yàn)證信息HMAC就不對了。這樣不同的公司的服務(wù)器的密鑰不同,產(chǎn)生的驗(yàn)證信息就不同。注意這個驗(yàn)證信息非常的小,通常只有幾十個字節(jié)的長度而且通常 數(shù)據(jù)信息里面還包含了有效期。 防止一個token使用的時間太長。 就像身份證上面有有效期

18、一樣。我們大體明白了token的概念后,就可以理解基于token的驗(yàn)證方案了這種方案是這樣的, 根據(jù)圖講解1:和前面 session 方案一樣,都是用戶登錄,提供 證明信息, 比如用戶名、密碼2:服務(wù)器驗(yàn)證后, 注意不是產(chǎn)生一個sessionid 標(biāo)志這次通信, 而是 產(chǎn)生一個token 。 token 里面則包含了一些關(guān)于這個用戶的數(shù)據(jù)信息, 比如用戶id,用戶名、用戶等級。 具體是哪些信息,不同的產(chǎn)品不一樣。 關(guān)鍵看以后這個產(chǎn)品的服務(wù)器需要快速得到用戶的哪些信息。 如果是一個游戲系統(tǒng), 可能 需要 用戶的 id,用戶權(quán)限:比如可以使用游戲裝備等。如果是一個教育系統(tǒng),可能 需要 用戶的 id,用戶權(quán)限:比如可以觀看哪些類型的教學(xué)資源等。所以關(guān)鍵,看系統(tǒng)設(shè)計者 選擇存儲哪些信息。-當(dāng)然里面還包含了驗(yàn)證token有效性的數(shù)據(jù)。 根據(jù)我們上面說的算法產(chǎn)生 ,就是 hmac(密鑰 + 數(shù)據(jù))= 驗(yàn)證信息3 服務(wù)器將 token返回給客戶端。 客戶端得到token后,以后每次業(yè)務(wù)請求都要帶上token。通常放在http請求

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論