JWT是目前流行的跨域認證解決方案,其原理是將使用者資訊透過加密產生Token,每次請求服務端只需要使用已儲存的金鑰驗證Token的正確性,然後再儲存任何Session數據,使服務端變得無狀態。
jwt驗證方式是將使用者資訊透過加密產生token,每次要求服務端只需要使用已儲存的金鑰驗證token的正確性,不用再儲存任何session資料了,進而服務端變成無狀態,容易實現拓展。
加密前的使用者訊息,如:
{ "username": "vist", "role": "admin", "expire": "2018-12-08 20:20:20" }
客戶端收到的token:
7cd357af816b907f2cc9acbe9c3b4625
JWT 結構
##一個token分為3部分:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c頭 JWT的頭部分是一個JSON對象,描述元數據,通常是:
{ "typ": "JWT", "alg": "HS256" }typ 為聲明類型,指定"JWT"alg 為加密的演算法,預設為"HS256"
載荷
載荷(payload)是資料的載體,用來存放實際需要傳遞的資料訊息,也是一個JSON物件。 JWT官方推薦欄位:{ "username": "vist", "role": "admin" }#簽名 簽名部分是對前兩部分(頭部,載荷)的簽名,防止資料竄改。 按下列步驟產生:1、先指定金鑰(secret)#2、把頭部(header)和載重(payload)資訊分別base64轉換3、使用頭部(header)指定的演算法加密最終,簽章(signature) = HMACSHA256(base64UrlEncode(header) "." base64UrlEncode(payload),secret)客戶端得到的簽章:
header.payload.signature也可以對JWT進行再加密。
推薦教學:《PHP
》###以上是JWT 是做什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!