一、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的標准。
其工作流程是這樣的
- 用戶使用用戶名和密碼進行鑒權
- 服務端進行鑒權
- 服務端給客戶端分配一個加密的token
- 客戶端保存這個token,以后的每個請求,客戶端都會發送這個token
- 服務端通過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是自包含的,因此減少了需要查詢數據庫的需要。