ทำความเข้าใจ 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 | คำอธิบาย |
|---|---|
iss | Issuer — ผู้ออก token |
sub | Subject — ตัวระบุผู้ใช้ |
aud | Audience — ผู้รับที่กำหนด |
exp | เวลาหมดอายุ |
iat | เวลาที่ออก token |
jti | JWT 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 ไม่ถูกต้อง');
}
แนวทางปฏิบัติด้านความปลอดภัย
- ใช้ secret key ที่แข็งแกร่ง: ใช้ key แบบสุ่มที่ยาว (อย่างน้อย 256 bits)
- กำหนดเวลาหมดอายุ: กำหนด
expเสมอเพื่อจำกัดอายุของ token - ใช้ HTTPS: ส่ง token ผ่าน HTTPS เสมอ
- เก็บอย่างปลอดภัย: เก็บ token ใน
httpOnlycookies ไม่ใช่ localStorage - ตรวจสอบ claims: ตรวจสอบ
exp,issและaudเสมอ
ลองใช้งานได้เลย
ใช้ เครื่องมือ JWT Decoder ของเราเพื่อถอดรหัสและตรวจสอบ JWT tokens ได้โดยตรงในเบราว์เซอร์
เครื่องมือที่เกี่ยวข้อง
- Base64 Encoder — JWT ใช้การเข้ารหัส Base64URL ภายใน
- API Client — ทดสอบ API ที่ใช้การยืนยันตัวตนด้วย JWT