nicetool.dev logo

JWT คืออะไร?

JSON Web Token (JWT) เป็นมาตรฐานเปิด (RFC 7519) ที่กำหนดวิธีการสื่อสารข้อมูลระหว่างฝ่ายต่างๆ อย่างปลอดภัยในรูปแบบของอ็อบเจกต์ JSON ข้อมูลนี้สามารถตรวจสอบและเชื่อถือได้เนื่องจากมีการลงนามแบบดิจิทัล

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

JWT คือสตริงที่ประกอบด้วยสามส่วนที่เข้ารหัส Base64URL ได้แก่ Header (ส่วนหัวระบุอัลกอริทึม), Payload (ข้อมูล/ข้อเรียกร้อง) และ Signature (ลายเซ็นสําหรับตรวจสอบ) โดยทั้งสามส่วนจะคั่นด้วยจุด (.) ดังนี้:

header.payload.signature

กรณีการใช้งานทั่วไป

  • การอนุญาตสิทธิ์: เป็นกรณีที่พบบ่อยที่สุด เมื่อผู้ใช้เข้าสู่ระบบ คำขอแต่ละรายการหลังจากนั้นจะรวม JWT ไว้ด้วย เพื่อให้ผู้ใช้สามารถเข้าถึงเส้นทาง บริการ และทรัพยากรที่ได้รับอนุญาต
  • การแลกเปลี่ยนข้อมูล: JWT เป็นวิธีที่ดีในการตรวจสอบความถูกต้องของข้อมูลระหว่างฝ่ายต่างๆ
  • เซสชันแบบไม่มีสถานะ: ไม่จำเป็นต้องเก็บข้อมูลเซสชันไว้ในเซิร์ฟเวอร์ เนื่องจากโทเค็นมีข้อมูลผู้ใช้ที่จำเป็นครบถ้วนแล้ว

ความเป็นส่วนตัวและความปลอดภัย

ความปลอดภัยของคุณคือสิ่งสำคัญอันดับแรกของเรา ตรรกะการถอดรหัสและตรวจสอบ JWT ทั้งหมดทำบนฝั่งไคลเอ็นต์ด้วย JavaScript ในเบราว์เซอร์ของคุณ ไม่มีการส่งโทเค็น ส่วนหัว หรือส่วนข้อมูลไปยังเซิร์ฟเวอร์ของเรา

ทำงานบนเบราว์เซอร์ 100%

วิธีใช้ ตัวดีบัก JWT

  1. 1

    วางโทเค็น (ขึ้นต้นด้วย eyJ) ลงในช่อง Encoded ส่วน header และ payload จะถูกถอดรหัสทันทีและแสดงเป็น JSON ที่จัดรูปแบบแล้ว

  2. 2

    ตรวจดู claim มาตรฐาน เวลาอย่าง exp, iat และ nbf จะแสดงเป็นวันเวลาที่อ่านง่าย ทำให้รู้ทันทีว่าโทเค็นหมดอายุหรือยังไม่เริ่มใช้งาน

  3. 3

    หากต้องการตรวจลายเซ็น ให้ใส่ secret ของ HMAC (HS256/384/512) หรือ public key แบบ PEM (RS256/384/512, ES256/384/512) เครื่องมือจะบอกว่าลายเซ็นตรงกันหรือไม่

  4. 4

    สลับไปโหมด Generator เพื่อสร้างโทเค็นทดสอบ แก้ payload เลือกอัลกอริทึม ใส่ secret หรือ private key แล้วคัดลอก JWT ที่ลงนามแล้ว

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

ดีบักข้อผิดพลาด 401

เมื่อ API ปฏิเสธ request ด้วย 401 Unauthorized ให้ถอดรหัสโทเค็นเพื่อหา exp ที่หมดอายุ aud ที่ผิด หรือ claim scope ที่ขาดหายไป

ตรวจโทเค็นจากผู้ให้บริการยืนยันตัวตน

ตรวจสอบ ID token จาก Auth0, Keycloak, Firebase หรือ Azure AD เพื่อดูว่าแอปได้รับ claim ใดบ้างจริง ๆ (email, roles, groups)

ทดสอบสิทธิ์ตามบทบาท

สร้างโทเค็นที่มี role "admin" และ role "viewer" ลงนามด้วย secret ของสภาพแวดล้อมพัฒนา เพื่อทดสอบทั้งสองเส้นทางของการตรวจสิทธิ์

ตรวจสอบการหมุนเวียนคีย์

หลังเปลี่ยนคีย์ ให้วางโทเค็นใหม่และ public key ใหม่ เพื่อยืนยันว่า kid ใน header และลายเซ็นตรงกับคีย์ใหม่

คำถามที่พบบ่อย

JWT ถูกเข้ารหัสหรือไม่?+

โดยทั่วไปไม่ JWT มาตรฐาน (JWS) แค่เข้ารหัส Base64URL และลงนาม ทุกคนอ่าน payload ได้ จึงไม่ควรใส่รหัสผ่านหรือข้อมูลส่วนบุคคลที่ละเอียดอ่อน โทเค็นแบบเข้ารหัส (JWE) เป็นอีกรูปแบบหนึ่ง

สามส่วนของ JWT หมายถึงอะไร?+

header.payload.signature โดย header ระบุอัลกอริทึมและประเภทโทเค็น payload เก็บ claim และลายเซ็นพิสูจน์ว่าสองส่วนแรกถูกสร้างโดยผู้ถือคีย์และไม่ถูกแก้ไข

วางโทเค็น production ที่นี่ปลอดภัยหรือไม่?+

การถอดรหัสและตรวจสอบทำในเบราว์เซอร์ทั้งหมด ไม่มีการส่งไปยังเซิร์ฟเวอร์ของเรา แต่โทเค็นที่ยังใช้ได้มีผลเหมือนรหัสผ่านจนกว่าจะหมดอายุ จึงควรใช้โทเค็นทดสอบหรือเพิกถอนโทเค็นจริงหลังดีบัก

ควรใช้ HS256 หรือ RS256?+

HS256 ใช้ secret ร่วมกันตัวเดียวทั้งลงนามและตรวจสอบ เหมาะกับบริการเดียว ส่วน RS256 และ ES256 ลงนามด้วย private key และตรวจด้วย public key เหมาะกับระบบที่หลายบริการต้องตรวจโทเค็นจากผู้ออกรายเดียว