后端 API 處理流程
后端 API 處理流程圖
JWT 簡析
JSON Web Token(JWT)是非常流行的跨域身份驗證解決方案。
Token
Token 本質是字符串,用于請求時附帶在請求頭中,校驗請求是否合法及判斷用戶身份
Token 與 Session、Cookie 的區別
- Session 保存在服務端,用于客戶端與服務端連接時,臨時保存用戶信息,當用戶釋放連接后,Session 將被釋放;
- Cookie 保存在客戶端,當客戶端發起請求時,Cookie 會附帶在 http header 中,提供給服務端辨識用戶身份;
- Token 請求時提供,用于校驗用戶是否具備訪問接口的權限。
Token 的用途
- 攔截無效請求,降低服務器處理壓力;
- 實現第三方 API 授權,無需每次都輸入用戶名密碼鑒權;
- 身份校驗,防止 CSRF 攻擊。
JWT 構成
HEADER: ALGORITHM & TOKEN TYPE
JWT 頭部分是一個描述 JWT 元數據的 JSON 對象:
{
"alg": "HS256",
"typ": "JWT"
}
- alg:表示加密算法,HS256 是 HMAC SHA256 的縮寫
- typ:token 類型
PAYLOAD: DATA
JWT 數據部分,payload 是 JWT 的主體內容部分,也是一個 JSON 字符串,包含需要傳遞的數據,注意 payload 部分不要存儲隱私數據,防止信息泄露。
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
VERIFY SIGNATURE
JWT 簽名部分是對上面兩部分數據加密后生成的字符串,通過 header 指定的算法生成加密字符串,以確保數據不會被篡改。
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
abcdefg
)
生成簽名時需要使用密鑰(如上面的 abcdefg
),密鑰只保存在服務端,不能向用戶公開,它是一個字符串,我們可以自由指定。
生成簽名時需要根據 header 中指定的簽名算法,并根據下方的公式,即將 header 和 payload 的數據通過 base64加密后用.
進行連接,然后通過密鑰進行 SHA256 加密,由于加入了密鑰,所以生成的字符串將無法被破譯和篡改,只有在服務端才能還原。