Jmeter接口測試-JWT鑒權


登錄及jwt(json+web+token)鑒權

Web的登錄鑒權方式(cookie base):
HTTP的特性:短連接、是無狀態的、每次發送的請求都是新的,服務器無法知道每次請求是哪個用戶發送的?那么如何才能知道每次發送的請求是哪個用戶發送的呢?     --- 通過session實現

(客戶端)
client(web) ------------>server
                                    (服務端)

網站調用登錄接口傳入username、password 到達服務器端此時服務器會鑒權,鑒權通過此時服務器會產生一個session,此時這個session是有一個sessionid的,然后服務器將這個session加密后通過set-cookie的方式發送給客戶端(從cookie里面發送,一串類似指紋的token)客戶端把token解出來以后可以知道在服務端對應的sessionid是哪一個,之后每一次發送的請求都會帶上cookie,cookie里面的信息是token,服務器看到token以后會把token和session進行關聯起來。這樣服務器就可以知道那個用戶登錄了,用戶是誰。登錄態是在cookie中,清掉cookie需要重新登錄。cookie是存在哪里呢?--瀏覽器中

App的登錄鑒權方式(token base):

(客戶端)
client(app) ------------>server
                                  (服務端)

通過服務器發送一個數據:本地存文件-類似cookie方式
服務器端會實現一套cookie過期機制,這個方法並不簡單。那么有沒有什么更簡單的辦法呢?


一個請求(包含username/password)發送給服務器,服務器會鑒權,這時候沒有session這時候通過username/password知道哪個用戶登錄,然后將用戶信息加密(加密成一個token-類似字符串)然后把token發送給客戶端-客戶端把token保存起來,之后每一次發送服務端的請求都帶上token,服務器端收到token以后可以通過token反解出來這個用戶是誰?及過期時間,比如token是否在過期時間之內,如果已經超過過期時間就實效了,在發送一個新的token給我。

這種方式的優勢和劣勢:
在服務器端沒有開任何的session,沒有什么空間開銷,撐得用戶數會多一些。但是解token會占用cpu,消耗時間。

思考一個問題:http請求通過什么方式把token發到服務器?
一般把token放到header中發送到服務器 。在訪問需要鑒權的接口時,我們將token放到http請求的header中,如果該token是有效的,那么接口正常返回,否則接口返回401錯誤。

實   現

POST /login username/password這個接口提供了登錄功能。

如果username和password組合是正確的,該接口將返回如下的信息

  • id: 登錄用戶的id
  • username: 登錄用戶的用戶名
  • token: 用戶登錄的憑證,登錄之后,所有的后續請求都必須包含該token。
{
  "id":2,
  "username":"admin",
  "token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiaWQiOjIsImlhdCI6MTQ3MzQ5Nzc1MCwiZXhwIjoxNTU5ODk3NzUwfQ.CkxZAESKLNVu8FOOkxqdbpBukl2FFteAvPWOQulXPgc"
}

 1.我們將注冊的API接口停掉,避免每次都注冊。因為我們要驗證的是登錄接口。我們現在取一個注冊已經好的用戶名和密碼登錄系統user_251,user251,如下圖所示:

2.運行結果后,查看結果樹查看我們發送的請求是否發送成功,返回token是否成功。

如上圖所示,我們登錄接口發送的請求成功,並且返回了一個token這個token是加密過得。那么我們接下來如何獲取這個token的值呢呢?當熱,我們可以通過變量的方式獲取token的值,具體請看下面的操作。

3.我們在登錄請求右鍵---添加--后置處理器--選擇json extractor 方式來獲取token的值

4.在json extractor中需要進行如下設置,我們在variablenames中設置一個變量名,方便后面引用這個變量名,然后獲取token的值$.token代表的是從根下面取第一個token值,找不到就報錯:NOT FOUND

我們設置的變量名token,獲取這個token變量的目的是方便在后面使用,很重要哦!所以,先暫時介紹到這里。我們繼續聊正題!

5.設置完成后,我們需要做登陸后的斷言,沒有斷言的接口測試是不嚴謹的。這里我們使用jmeter提供給我們的“響應斷言”,因為這種的方式比較簡單,好理解,也能解決實際問題。如圖所示,我們添加一個響應斷言:

6.響應斷言里面參數設置如下圖所示:

7.驗證斷言是否成功,我們再次運行登陸接口請求API。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM