ตัวถอดรหัส JWT (JWT Decoder)
วาง JSON Web Token เพื่ออ่าน header และ payload ดูว่าหมดอายุเมื่อไร และเข้าใจทุก claim โทเค็นของคุณไม่เคยออกจากเบราว์เซอร์
ทำงานในเบราว์เซอร์ไม่ต้องสมัครไม่มีการอัปโหลด
การถอดรหัสไม่ใช่การตรวจสอบ ใครก็อ่าน header และ payload ของ JWT ได้ เพราะเป็นเพียงการเข้ารหัสแบบ base64url เครื่องมือนี้แสดงสิ่งที่โทเค็น อ้าง แต่ไม่ได้พิสูจน์ว่าโทเค็นเป็นของจริง ควรตรวจสอบลายเซ็นบนเซิร์ฟเวอร์ของคุณเสมอ
Header
Payload
คำอธิบาย claim
ตรวจสอบลายเซ็น (ไม่บังคับ, HS256/HS384/HS512)
ตรวจสอบลายเซ็น HMAC ด้วย secret ที่คุณป้อน โดยใช้ Web Crypto API ของเบราว์เซอร์ secret จะไม่ออกจากหน้านี้ โทเค็น RSA/ECDSA ต้องใช้ public key ของผู้ออกจึงไม่ได้ตรวจสอบที่นี่
วิธีใช้ ตัวถอดรหัส JWT
- วางโทเค็นลงในช่อง โทเค็นที่เข้ารหัส คำว่า
Bearerด้านหน้าจาก Authorization header จะถูกข้าม - header และ payload จะถูกถอดรหัสทันทีและแสดงเป็น JSON ที่จัดรูปแบบแล้ว
- อ่านตาราง คำอธิบาย claim:
exp,iatและnbfถูกแปลงเป็นวันที่ พร้อมบอกเวลา “จะหมดอายุใน” / “หมดอายุไปแล้ว” - ดูแถบสถานะเพื่อหาปัญหาเรื่องวันหมดอายุ และดูคำเตือนสำหรับการตั้งค่าที่เสี่ยง เช่น
alg: none - หากต้องการ ป้อน shared secret เพื่อตรวจสอบลายเซ็น HS256, HS384 หรือ HS512 ภายในเครื่อง
ภายใน JWT มีอะไร?
JSON Web Token (RFC 7519) คือสตริง base64url สามส่วนที่เชื่อมด้วยจุด: header.payload.signature ส่วน header ระบุอัลกอริทึมที่ใช้ลงนาม (alg) และชนิดของโทเค็น ส่วน payload เก็บ claim ต่าง ๆ เช่น ผู้ใช้คือใคร และโทเค็นหมดอายุเมื่อไร ส่วน signature คำนวณจากสองส่วนแรกด้วย secret หรือ private key
การถอดรหัสไม่ใช่การตรวจสอบ
header และ payload เป็นเพียงการเข้ารหัส (encode) ไม่ได้เข้ารหัสลับ (encrypt) ใครที่ถือโทเค็นก็อ่านได้ นี่จึงเป็นเหตุผลที่ไม่ควรใส่รหัสผ่านหรือข้อมูลลับใน payload ของ JWT การถอดรหัสบอกว่าโทเค็น อ้างว่า อะไร ส่วนการตรวจสอบลายเซ็น ซึ่งปกติทำบน API server ด้วยไลบรารีอย่าง jose หรือ PyJWT จะพิสูจน์ว่าใครเป็นผู้ออกโทเค็นและโทเค็นไม่ถูกแก้ไข เซิร์ฟเวอร์ต้องตรวจ exp, nbf, iss และ aud ด้วย และปฏิเสธอัลกอริทึมที่ไม่คาดคิด
สรุป registered claim
| Claim | ความหมาย |
|---|---|
iss | Issuer: ผู้สร้างและลงนามโทเค็น |
sub | Subject: โดยทั่วไปคือ ID ของผู้ใช้ |
aud | Audience: API ที่โทเค็นนี้มีไว้ใช้ |
exp | เวลาหมดอายุ เป็นวินาทีนับจาก Unix epoch |
nbf | ใช้ไม่ได้ก่อนเวลานี้ |
iat | เวลาที่ออกโทเค็น |
jti | ID เฉพาะของโทเค็น มีประโยชน์สำหรับรายการเพิกถอน |
ดีบักข้อผิดพลาด “token expired”
หาก API ปฏิเสธโทเค็นที่ดูเหมือนยังใหม่ ให้เทียบ exp และ nbf กับนาฬิกาของเซิร์ฟเวอร์ นาฬิกาที่คลาดเคลื่อนเล็กน้อยระหว่างเครื่องเป็นเรื่องปกติ ไลบรารีส่วนใหญ่จึงเผื่อเวลา 30-60 วินาที และตรวจด้วยว่า exp เป็นวินาที ค่าที่เป็นมิลลิวินาทีเป็นบั๊กที่พบบ่อย และทำให้วันหมดอายุอยู่ในอนาคตอีกหลายพันปี
คำถามที่พบบ่อย
วาง JWT ของ production ที่นี่ปลอดภัยหรือไม่?
เครื่องมือนี้ตรวจสอบลายเซ็น JWT หรือไม่?
ทำไมโทเค็นของฉันแสดงว่าหมดอายุ?
exp อยู่ในอดีตเมื่อเทียบกับนาฬิกาของคอมพิวเตอร์คุณ ให้ขอโทเค็นใหม่หรือรีเฟรชด้วย refresh token หากเวลาดูไม่ถูกต้อง ให้ตรวจสอบนาฬิกาที่คลาดเคลื่อน หรือค่า exp ที่เขียนเป็นมิลลิวินาทีJWT, JWS และ JWE ต่างกันอย่างไร?
ทำไม alg “none” จึงอันตราย?
alg: none และควรยอมรับเฉพาะอัลกอริทึมที่คาดไว้เท่านั้น