การเขียนโปรแกรมภาษา php ให้เรียกใช้งาน jwt อย่างง่าย
วันที่: 15 เม.ย. 2565 13:39 น.
![การเขียนโปรแกรมภาษา php ให้เรียกใช้งาน jwt อย่างง่าย](/images/20220415134527_10721.png)
ในบทความนี้จะพูดถึงเรื่อง JWT (Json Web Token) และนำมาใช้งานร่วมกับ PHP ซึ่ง JWT เป็น Standard Token หนึ่ง ที่ใช้ json data ในการเก็บข้อมูลของ user แล้วนำมาเข้ารหัสอีกที ซึ่งจะได้หน้าตาประมาณนี้
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
จะสังเกตได้ว่า token ที่ว่านี้จะขั้นด้วย . เป็นรูปแบบนี้ xxx.yyy.zzz
- xxx คือ Header จะถูกเข้ารหัสด้วย base64 แบบนี้
base64_encode(header)
- yyy คือ Payload ก็คือข้อมูลของเรานั่นแหละ จะถูกเข้ารหัสด้วย base64 แบบนี้
base64_encode(payload)
- zzz คือ Signature เป็นการเอา Payload มาเข้ารหัสด้วยรูปแบบที่กำหนดใน Header บวกกับ Secert Key ของเราที่เรากำหนดได้เอง
อ่านมาถึงตรงนี้หลายคนอาจสงสัยว่า ถ้าเข้ารหัสเป็น base64 ก็สามารถถอดรหัส (decode) กลับได้ ก็เห็นข้อมูลหมดสิ? ใช่แล้วครับ ข้อมูล payload ในที่นี้ก็ไม่ได้เก็บเป็นความลับอะไร ก็เป็นข้อมูลผู้ใช้ทั่วไป เช่น ชื่อ - สกุล, อีเมล, ระดับผู้ใช้, รหัสผู้ใช้ เป็นต้น แต่การจะเช็คว่า token นี้น่าเชื่อถือหรือไม่ ก็สามารถเช็คได้จากส่วน zzz เลยครับ
โค้ด PHP ที่ใช้งาน JWT
ก่อนอื่น สร้าง project ใน localhost ของเราก่อนเลย ในที่นี้ผมจะสร้างชื่อ php-jwt จากนั้นติดตั้ง jwt ใน folder ที่สร้างไว้ โดยใช้ composer
composer require firebase/php-jwt
สร้างไฟล์ index.php เพื่อเรียกใช้งาน โดยมีโค้ดดังนี้
<?php
include_once('./vendor/autoload.php');
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<style>
.container {
width: 100%;
max-width: 700px;
}
</style>
</head>
<body>
<div class="container">
<?php
$key = 'my secert key';
$data = array(
'id' => 1,
'name' => 'Puwanai Sangphon',
'email' => 'puwanai.sangphon@gmail.com'
);
$payload = array(
'iss' => 'https://puwanai.com',
'aud' => 'https://puwanai.com',
'iat' => time(),
'exp' => time() + 3600, // 1 ชม.
'data' => $data
);
$jwt = JWT::encode($payload, $key, 'HS256');
echo '
<h2 class="mt-4">Token</h2>
<code>', $jwt, '</code>';
$decoded = JWT::decode($jwt, new Key($key, 'HS256'));
echo '
<h2 class="mt-4">Decode</h2>';
echo '<pre>';
print_r($decoded);
echo '</pre>';
?>
</div>
</body>
</html>
ทดลองใช้งานผ่าน http://localhost/php-jwt/ ถ้าทุกอย่างถูกต้องจะมีผลดังนี้
แหล่งข้อมูลอ้างอิง
เรื่องอื่น ๆ ที่เกี่ยวข้อง
![Json Web Token (JWT) brute force การเดารหัสหรือ secret key ด้วย node.js](/images/og_20220914210332_07561.png)
Json Web Token (JWT) brute force การเดารหัสหรือ secret key ด้วย node.js
เมื่อวันที่: 14 ก.ย. 2565 21:03 น.
![สร้าง Line Login ให้กับเว็บไซต์ ด้วยภาษา PHP](/images/og_20220422230300_24360.png)
สร้าง Line Login ให้กับเว็บไซต์ ด้วยภาษา PHP
เมื่อวันที่: 22 เม.ย. 2565 22:55 น.
![พัฒนา Line bot ด้วยภาษา PHP อย่างง่าย ด้วยโค้ดไม่กี่บรรทัด (ep.1)](/images/og_20220213103807_82615.png)
พัฒนา Line bot ด้วยภาษา PHP อย่างง่าย ด้วยโค้ดไม่กี่บรรทัด (ep.1)
เมื่อวันที่: 13 ก.พ. 2565 10:38 น.
![พัฒนา Line bot ด้วยภาษา PHP อย่างง่าย ด้วยโค้ดไม่กี่บรรทัด (ep.2)](/images/og_20220614231501_86365.png)
พัฒนา Line bot ด้วยภาษา PHP อย่างง่าย ด้วยโค้ดไม่กี่บรรทัด (ep.2)
เมื่อวันที่: 14 มิ.ย. 2565 23:15 น.
![php show error แสดง errror ของ php เพื่อตรวจสอบข้อผิดพลาด](/images/og_20220212101627_47895.jpg)
php show error แสดง errror ของ php เพื่อตรวจสอบข้อผิดพลาด
เมื่อวันที่: 7 ก.พ. 2565 22:38 น.
![Web Scraping ดึงข้อมูลจากเว็บไซต์ด้วยภาษา PHP](/images/og_20220505220610_31319.png)
Web Scraping ดึงข้อมูลจากเว็บไซต์ด้วยภาษา PHP
เมื่อวันที่: 5 พ.ค. 2565 22:06 น.