HTTP基本認證和JWT鑒權


一、HTTP基本認證

Basic Authentication——當瀏覽器訪問使用基本認證的網站的時候, 瀏覽器會提示你輸入用戶名和密碼。

http auth的過程:

  • · 客戶端發送http請求
  • · 服務器發現配置了http auth,於是檢查request里面有沒有"Authorization"的http header
  • · 如果有,則判斷Authorization里面的內容是否在用戶列表里面,Authorization header的典型數據為"Authorization: Basic jdhaHY0=",其中Basic表示基礎認證, jdhaHY0=是base64編碼的"user:passwd"字符串。
  • · 如果沒有,或者用戶密碼不對,則返回http code 401頁面給客戶端
  • · 標准的http瀏覽器在收到401頁面之后,應該彈出一個對話框讓用戶輸入帳號密碼;並在用戶點確認的時候再次發出請求,這次請求里面將帶上Authorization header

一次典型的訪問場景是:

  • · 瀏覽器發送http請求(沒有Authorization header)
  • · 服務器端返回401頁面
  • · 瀏覽器彈出認證對話框
  • · 用戶輸入帳號密碼,並點確認
  • · 瀏覽器再次發出http請求(帶着Authorization header)
  • · 服務器端認證通過,並返回頁面
  • · 瀏覽器顯示頁面

項目舉例

wordpress api 創建文章,返回401.

1、安裝鑒權插件Application Passwords

admin登錄——工具——上傳插件(.zip)

用戶——詳情——Application Passwords——創建用戶名(即該用戶的名稱)生成密碼,記得保存下來。

2、xshell連接服務器

輸入命令

echo -n "test001:123456" | base64

3、打開jmeter

Ctrl+0:線程組(作者)

Ctrl+1:HTTP請求(創建文章)

添加配置文件——HTTP Headers Manager

添加參數

Authorization:Basic空格Authorization

運行腳本,成功。

 

 

二、JWT鑒權

JWT是一種token based auth的標准。

其工作流程是這樣的

  1. 用戶使用用戶名和密碼進行鑒權
  2. 服務端進行鑒權
  3. 服務端給客戶端分配一個加密的token
  4. 客戶端保存這個token,以后的每個請求,客戶端都會發送這個token
  5. 服務端通過token判斷是否是鑒權過的用戶,並返回請求的響應數據

JWT的特點

  • 簡潔:可以通過URL,POST參數或者在HTTP header發送,因為數據量小,傳輸速度也很快
  • 自包含:payload中包含了所有用戶所需要的信息,避免了多次查詢數據庫

JWT的應用場景

  • 身份認證
  • 安全要求的信息交換

JWT的結構

JWT包含了使用.分隔的三部分:

  • Header 頭部:Base64Url(token類型+加密算法)
  • Payload 負載:Base64Url(用戶信息)
  • Signature 簽名:算法(  base64UrlEncode(header) + "." +  base64UrlEncode(payload),  密鑰)

其結構看起來是這樣的

xxxxx.yyyyy.zzzzz

簽名用於驗證消息的發送者以及消息是沒有經過篡改的。如果黑客獲取到了payload中的用戶信息,並進行了篡改,那么經過Base64編碼后也會發生變化,而簽名是根據Header和Payload共同決定的,簽名也會不一樣,服務器就會判斷出不一致。

下列的JWT展示了一個完整的JWT格式,它拼接了之前的Header, Payload以及秘鑰簽名:

如何使用JWT?

1)用戶在客戶端輸入用戶名和密碼登錄服務器;

2)服務器認證通過后,返回給用戶一個JWT

3)客戶端只需要本地保存該token(通常使用local storage,也可以使用cookie)即可。

4)當用戶下次訪問時,在Authorization頭部使用Bearer模式添加JWT,格式Authorization: Bearer <token>

5)服務端檢查請求頭Authorization中的JWT信息,如果合法,則允許用戶的行為。

由於JWT是自包含的,因此減少了需要查詢數據庫的需要。

 


免責聲明!

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



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