JWT คืออะไร?


JWT (JSON Web Token)

JWT (JSON Web Token)

เป็นมาตรฐานที่ใช้สำหรับส่งข้อมูลระหว่างฝ่ายต่างๆ ในรูปแบบ JSON ที่มีการเซ็นรับรองด้วยการเข้ารหัส ข้อมูลที่ถูกส่งไปใน JWT จะถูกเข้ารหัสและสามารถตรวจสอบความถูกต้องได้แต่จะไม่ถูกเข้ารหัส (หมายถึงสามารถอ่านได้โดยผู้รับหากมีการถอดรหัส)

ส่วนประกอบของ JWT

JWT ประกอบด้วย 3 ส่วนหลัก ๆ

  • Header ประกอบด้วยสองส่วนคือประเภทของโทเคน (ในกรณีนี้คือ JWT) และอัลกอริธึมที่ใช้ในการเซ็นรับรอง เช่น HMAC SHA256
{
  "alg": "HS256",
  "typ": "JWT"
}
  • Payload ส่วนที่ประกอบด้วยข้อมูลที่ต้องการส่ง ซึ่งอาจจะมีข้อมูลผู้ใช้งานหรือข้อมูลอื่นๆ ขึ้นอยู่กับการใช้งาน ข้อมูลในส่วนนี้จะถูกเข้ารหัสในรูปแบบ Base64
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}
  • Signature ส่วนที่ใช้ในการตรวจสอบความถูกต้องของโทเคน เพื่อให้มั่นใจว่าข้อมูลใน Header และ Payload ไม่ได้ถูกเปลี่ยนแปลง Signature นี้ถูกสร้างขึ้นโดยการนำข้อมูลใน Header และ Payload มารวมกันแล้วเข้ารหัสด้วย secret key
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

การใช้งาน JWT 🤔

JWT มักถูกนำไปใช้งานในหลายด้าน เช่น การรับรองตัวตนของผู้ใช้งาน (authentication) การแลกเปลี่ยนข้อมูลอย่างปลอดภัยระหว่างฝ่ายต่างๆ โดยเฉพาะในระบบที่ต้องการความรวดเร็วและปลอดภัย

ตัวอย่างโค้ด 👨🏻‍💻

ด้านล่างเป็นตัวอย่างการสร้างและตรวจสอบ JWT โดยใช้ภาษา JavaScript ร่วมกับไลบรารี jsonwebtoken

การติดตั้งไลบรารี 📚

npm install jsonwebtoken

การสร้าง JWT

Generate JWT
const jwt = require('jsonwebtoken');
 
const payload = {
  sub: '1234567890',
  name: 'John Doe',
  admin: true
};
 
const secret = 'your-256-bit-secret';
 
const token = jwt.sign(payload, secret, { algorithm: 'HS256', expiresIn: '1h' });
 
console.log('Generated JWT:', token);

การตรวจสอบ JWT

Verify JWT
const token = 'your.jwt.token.here';
 
try {
  const decoded = jwt.verify(token, secret);
  console.log('Decoded JWT:', decoded);
} catch (err) {
  console.error('Invalid Token:', err.message);
}

ในตัวอย่างข้างต้น

  • การสร้าง JWT ใช้ฟังก์ชัน sign ของไลบรารี jsonwebtoken โดยกำหนด payload, secret key และอัลกอริธึมที่ใช้
  • การตรวจสอบ JWT ใช้ฟังก์ชัน verify โดยใส่โทเคนและ secret key หากโทเคนถูกต้องจะคืนค่า payload ที่ถูกถอดรหัสแล้ว หากไม่ถูกต้องจะเกิดข้อผิดพลาด

สรุป

JWT เป็นมาตรฐานที่มีความปลอดภัยและสะดวกในการส่งข้อมูลระหว่างฝ่ายต่างๆ ในรูปแบบ JSON มีการใช้งานที่หลากหลายโดยเฉพาะในเรื่องของการรับรองตัวตนและการแลกเปลี่ยนข้อมูลอย่างปลอดภัย การสร้างและตรวจสอบ JWT สามารถทำได้ง่ายๆ ด้วยไลบรารีต่างๆ เช่น jsonwebtoken ใน JavaScript