ตัวถอดรหัส 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 โดยไม่จำเป็น