IS
ISSARAPONG
Developer
🇹🇭 ภาษาไทย

ทำความเข้าใจ JWT Tokens

คู่มือฉบับสมบูรณ์เกี่ยวกับ JSON Web Tokens (JWT) — วิธีการทำงาน โครงสร้าง และแนวทางปฏิบัติที่ดีในการใช้งานระบบยืนยันตัวตน

Issarapong10 กุมภาพันธ์ 25672 นาที

ทำความเข้าใจ JWT Tokens

JSON Web Tokens (JWT) คือมาตรฐานเปิด (RFC 7519) สำหรับการส่งข้อมูลอย่างปลอดภัยระหว่างคู่สัญญาในรูปแบบ JSON ใช้อย่างแพร่หลายสำหรับการยืนยันตัวตนและการแลกเปลี่ยนข้อมูลในเว็บแอปพลิเคชัน

โครงสร้างของ JWT

JWT ประกอบด้วย 3 ส่วนคั่นด้วยจุด (.):

header.payload.signature

1. Header (ส่วนหัว)

Header ประกอบด้วยประเภทของ token และอัลกอริทึมการเซ็น:

{
  "alg": "HS256",
  "typ": "JWT"
}

2. Payload (ข้อมูล)

Payload ประกอบด้วย claims (ข้อมูลเกี่ยวกับผู้ใช้):

{
  "sub": "1234567890",
  "name": "สมชาย ใจดี",
  "iat": 1516239022,
  "exp": 1516242622
}

3. Signature (ลายเซ็น)

Signature สร้างโดยการเข้ารหัส header และ payload ด้วย Base64URL และเซ็นด้วย secret key:

HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret
)

Claims มาตรฐาน

Claimคำอธิบาย
issIssuer — ผู้ออก token
subSubject — ตัวระบุผู้ใช้
audAudience — ผู้รับที่กำหนด
expเวลาหมดอายุ
iatเวลาที่ออก token
jtiJWT ID — ตัวระบุเฉพาะ

ตัวอย่างการใช้งาน

Node.js ด้วย jsonwebtoken

const jwt = require('jsonwebtoken');

// สร้าง token
const token = jwt.sign(
  { userId: 123, email: '[email protected]' },
  'your-secret-key',
  { expiresIn: '1h' }
);

// ตรวจสอบ token
try {
  const decoded = jwt.verify(token, 'your-secret-key');
  console.log(decoded);
} catch (err) {
  console.error('Token ไม่ถูกต้อง');
}

แนวทางปฏิบัติด้านความปลอดภัย

  1. ใช้ secret key ที่แข็งแกร่ง: ใช้ key แบบสุ่มที่ยาว (อย่างน้อย 256 bits)
  2. กำหนดเวลาหมดอายุ: กำหนด exp เสมอเพื่อจำกัดอายุของ token
  3. ใช้ HTTPS: ส่ง token ผ่าน HTTPS เสมอ
  4. เก็บอย่างปลอดภัย: เก็บ token ใน httpOnly cookies ไม่ใช่ localStorage
  5. ตรวจสอบ claims: ตรวจสอบ exp, iss และ aud เสมอ

ลองใช้งานได้เลย

ใช้ เครื่องมือ JWT Decoder ของเราเพื่อถอดรหัสและตรวจสอบ JWT tokens ได้โดยตรงในเบราว์เซอร์

เครื่องมือที่เกี่ยวข้อง

  • Base64 Encoder — JWT ใช้การเข้ารหัส Base64URL ภายใน
  • API Client — ทดสอบ API ที่ใช้การยืนยันตัวตนด้วย JWT