ตัวถอดรหัส JWT
JSON Web Token มีสามส่วน Base64url: header.payload.signature วาง JWT เพื่ออ่านอัลกอริทึม (alg), ผู้ออก (iss), หัวเรื่อง (sub) และวันหมดอายุ (exp) โดยไม่ส่งโทเค็นไปเซิร์ฟเวอร์
วิธีถอดรหัส JWT
1. วางสตริง JWT (รูปแบบ eyJ...)
2. อ่าน JSON header ที่ถอดรหัสแล้ว (typ, alg)
3. อ่าน claims ใน payload (sub, exp, roles)
4. เทียบ exp กับเวลาปัจจุบัน — โทเค็นหมดอายุทำให้ยืนยันตัวตน API ล้มเหลว
ตัวอย่างการตรวจ JWT
ดีบัก 401 Unauthorized
ถอดรหัส access token — exp อาจอยู่ในอดีตเพราะนาฬิกาคลาดหรือ TTL สั้น
ตรวจ OAuth id_token
ดู claims อีเมลและชื่อที่ส่งกลับจากผู้ให้บริการอัตลักษณ์
รีวิวฟิกซ์เจอร์ทดสอบ
ยืนยันว่าโทเค็นทดสอบ HS256 มี claim role:admin ก่อนทดสอบอินทิเกรชัน
เมื่อไหร่ควรถอดรหัส JWT
• เมื่อดีบักการยืนยันตัวตนในการพัฒนาด้วยโทเค็นทดสอบ
• เมื่อเรียนรู้โครงสร้าง JWT และ claims มาตรฐาน
• เมื่อตรวจ payload ก่อนลงมือตรวจ RBAC
claims ที่ลงทะเบียนมาตรฐาน
iss (ผู้ออก), sub (หัวเรื่อง), aud (ผู้รับ), exp (หมดอายุ), nbf (ยังไม่ก่อน), iat (ออกเมื่อ), jti (JWT ID) claims กำหนดเองอย่าง roles หรือ tenant_id เป็นของแอป
คำถามที่พบบ่อย
สามส่วนของ JWT คืออะไร?
Header (อัลกอริทึมและประเภท), payload (claims), ลายเซ็น (การตรวจสอบ) คั่นด้วยจุด
การถอดรหัสยืนยันโทเค็นหรือไม่?
ไม่ — ใครก็ถอดรหัส payload ได้ ลายเซ็นพิสูจน์ความสมบูรณ์และผู้ออก
claim exp คืออะไร?
Unix timestamp เป็นวินาทีเมื่อโทเค็นหมดอายุ เทียบกับเวลา UTC ปัจจุบัน
การโจมตีอัลกอริทึม none?
เซิร์ฟเวอร์ต้องปฏิเสธ alg:none — ตัวถอดรหัสอาจยังแสดง header เพื่อตรวจทาน
ข้อมูลอ่อนไหวใน payload?
payload ของ JWT เป็น Base64 ไม่ได้เข้ารหัสลับ — อย่าใส่รหัสผ่านหรือ PII โดยไม่จำเป็น