iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0

什麼是JWT?

全名(JSON Web Tokens)

讓網絡進行安全傳遞

通常被用來作身分驗證、授權

工作原理?

  1. (Payload):包含使用者資訊和聲明的JSON結構,如USER ID。
  2. (Header):指定類型及簽名演算法,如HS256(HMAC SHA-256)。
  3. Heade、Payload進行簽名,使用SERVER的KEY生成簽名。
  4. Heade、Payload和簽名以Base64編碼,並用點號分隔它們以生成JWT(Token)。
  5. 發送生成的JWT(Token)給Client,通常存儲在Cookie。

設置密鑰

 📌 $key = "your_key";

創建TOKEN

 📌 function create($payload, $key)
 {
     $header = json_encode(['typ' => 'JWT', 'alg' => 'HS256']);
     $header = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($header));
     $payload = json_encode($payload);
     $payload = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($payload));
     $signature = hash_hmac('sha256',$header . "." .  $payload, $key, true);
     $signature = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($signature));
     return $header . "." . $payload . "." . $signature;
 }

驗證TOKEN

 📌 function verify($token, $key)
 {
     list($header, $payload, $signature) = explode('.', $token);
     $valid = hash_hmac('sha256', $header . "." . $payload, $secret_key, true);
     $valid = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($valid));
     return $signature === $valid;
 }

使用

 📌 $payload = array(
     "user_id" => 123456,
     "username" => “test"
 );
 $jwt = createToken($payload, $key);
 $isValid = verifyToken($jwt, $key);
 if ($isValid)
 {
     $decoded = json_decode(base64_decode(explode('.', $jwt)[1]));
     echo "Token is valid. User ID: " . $decoded->user_id;
 } 
 else 
 {
     echo "Token is invalid.";
 }

這樣我們就實現了一個簡單的JWT


上一篇
[DAY22]如何製作API(PHP)?
下一篇
[DAY24]PHP的型態有哪些?
系列文
從前端到後端,設計出屬於自己的購物網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言