เลือกภาษา

ตัวถอดรหัส JSON Web Token (JWT)

ถอดรหัส JWT เพื่อดูข้อมูล Header และ Payload ได้ทันที พร้อมแปลงเวลาให้อ่านง่าย รองรับการคัดลอกข้อมูล ปลอดภัยเพราะประมวลผลบนเบราว์เซอร์ของคุณเท่านั้น

Mehmet Demiray (เมห์เมต เดมิเรย์) เผยแพร่ อัปเดตล่าสุด
แชร์
แปลงเคลม exp, iat และ nbf เป็นวันที่ที่อ่านได้

โครงสร้างและองค์ประกอบของ JWT

JSON Web Token หรือ JWT เป็นมาตรฐานที่ใช้สำหรับการส่งผ่านข้อมูลอย่างปลอดภัยระหว่างระบบ โครงสร้างของ JWT ประกอบด้วยสามส่วนหลักที่คั่นด้วยจุด ได้แก่ Header, Payload และ Signature ซึ่งแต่ละส่วนจะถูกเข้ารหัสด้วย Base64URL ทำให้ข้อมูลอยู่ในรูปแบบของชุดตัวอักษรที่สามารถส่งผ่าน HTTP header หรือ URL ได้อย่างปลอดภัย ส่วนแรกคือ Header ซึ่งมักจะระบุประเภทของโทเค็นและอัลกอริทึมที่ใช้ในการสร้าง Signature ส่วนที่สองคือ Payload ซึ่งเก็บข้อมูลหรือ Claims ที่ต้องการส่งผ่าน ส่วนสุดท้ายคือ Signature ที่ใช้เพื่อยืนยันว่าข้อมูลไม่ได้ถูกดัดแปลงระหว่างทาง หากคุณต้องการดูข้อมูลที่ซ่อนอยู่ในโครงสร้างเหล่านี้ ตัวถอดรหัส JWT สามารถช่วยแยกและแสดงผลข้อมูลออกมาเป็นรูปแบบ JSON ที่อ่านง่าย คุณสามารถใช้ เครื่องมือถอดรหัส Base64 เพื่อทำความเข้าใจกระบวนการแปลงข้อมูลกลับเป็นข้อความปกติได้เช่นกัน

ทำความรู้จัก Standard Claims ที่สำคัญ

ภายในส่วน Payload ของ JWT จะประกอบด้วยชุดข้อมูลที่เรียกว่า Claims ซึ่งเป็นข้อมูลอ้างอิงเกี่ยวกับผู้ใช้หรือข้อมูลเมตาของโทเค็น มาตรฐาน RFC 7519 ได้กำหนด Standard Claims ที่นักพัฒนาแอปพลิเคชันควรทราบ ได้แก่ iss (Issuer) ระบุระบบที่ออกโทเค็น sub (Subject) ระบุตัวตนของผู้ใช้หรือสิ่งที่โทเค็นนี้อ้างถึง และ aud (Audience) ระบุระบบปลายทางที่อนุญาตให้ใช้โทเค็นนี้ Claims ที่เกี่ยวข้องกับเวลาเป็นอีกส่วนที่มีความสำคัญอย่างมากต่อความปลอดภัย เช่น exp (Expiration Time) ระบุเวลาหมดอายุของโทเค็น iat (Issued At) ระบุเวลาที่สร้างโทเค็น และ nbf (Not Before) ระบุเวลาที่โทเค็นจะเริ่มใช้งานได้ ข้อมูลเวลาเหล่านี้มักจะถูกเก็บในรูปแบบ Unix Timestamp ซึ่งตัวถอดรหัส JWT จะแปลงตัวเลขเหล่านี้ให้เป็นวันที่และเวลาที่มนุษย์สามารถอ่านและทำความเข้าใจได้ทันที ทำให้การตรวจสอบข้อมูลทำได้สะดวกยิ่งขึ้น การจัดรูปแบบข้อมูลให้เป็นระเบียบสามารถทำงานร่วมกับ เครื่องมือจัดรูปแบบ JSON เพื่อให้อ่านข้อมูล Claims ได้ง่ายขึ้น

ความแตกต่างระหว่างการถอดรหัสและการตรวจสอบสิทธิ์

การทำความเข้าใจความแตกต่างระหว่างการถอดรหัส (Decoding) และการตรวจสอบสิทธิ์ (Verifying) เป็นสิ่งสำคัญสำหรับนักพัฒนา ตัวถอดรหัส JWT ทำหน้าที่เพียงแค่อ่านข้อมูลที่ถูกเข้ารหัสด้วย Base64URL ในส่วน Header และ Payload แล้วแปลงกลับมาเป็นข้อความ JSON ให้เราอ่านได้ เครื่องมือนี้ไม่ได้ทำการตรวจสอบ Signature หรือยืนยันความถูกต้องของข้อมูลแต่อย่างใด การที่เครื่องมือสามารถถอดรหัสโทเค็นออกมาได้ ไม่ได้หมายความว่าโทเค็นนั้นปลอดภัยหรือเชื่อถือได้ การตรวจสอบสิทธิ์ที่แท้จริงจะต้องทำที่ฝั่งเซิร์ฟเวอร์ โดยระบบจะต้องนำ Header และ Payload มาสร้าง Signature ใหม่ด้วยรหัสลับ (Secret Key) หรือกุญแจสาธารณะ (Public Key) แล้วนำไปเปรียบเทียบกับ Signature ที่แนบมากับโทเค็น หากตรงกันจึงจะถือว่าข้อมูลไม่ถูกดัดแปลงและสามารถเชื่อถือได้ การใช้เครื่องมือนี้จึงเหมาะสำหรับการตรวจสอบข้อมูลเบื้องต้นระหว่างการพัฒนาเท่านั้น ไม่ควรนำข้อมูลที่ได้จากการถอดรหัสไปใช้ตัดสินใจในระบบจริงโดยไม่ผ่านการตรวจสอบสิทธิ์เสียก่อน

การใช้เครื่องมือเพื่อแก้ไขปัญหา Authentication

เมื่อระบบล็อกอินหรือ API ปฏิเสธการเข้าถึง การตรวจสอบข้อมูลภายใน JWT เป็นขั้นตอนแรกที่ช่วยระบุสาเหตุของปัญหาได้ ตัวถอดรหัส JWT ช่วยให้นักพัฒนาสามารถนำโทเค็นที่มีปัญหามาตรวจสอบได้อย่างรวดเร็ว ปัญหาที่พบบ่อยที่สุดคือโทเค็นหมดอายุ ซึ่งสามารถตรวจสอบได้จากค่า exp ใน Payload หากเวลาปัจจุบันเกินกว่าเวลาที่ระบุไว้ ระบบจะปฏิเสธการเข้าถึงทันที ปัญหาถัดมาคือการส่งโทเค็นไปยังระบบที่ไม่ถูกต้อง ซึ่งสามารถตรวจสอบได้จากค่า aud หรือ Audience ว่าตรงกับระบบปลายทางที่ตั้งใจไว้หรือไม่ ปัญหาความคลาดเคลื่อนของเวลาระหว่างเซิร์ฟเวอร์ (Clock Skew) เป็นอีกหนึ่งสาเหตุที่ทำให้โทเค็นใช้งานไม่ได้ เช่น เซิร์ฟเวอร์ที่ตรวจสอบโทเค็นมีเวลาเร็วกว่าเซิร์ฟเวอร์ที่ออกโทเค็น ทำให้ค่า nbf หรือ iat ถูกมองว่าเป็นเวลาในอนาคต การมองเห็นค่าเหล่านี้อย่างชัดเจนผ่านเครื่องมือจะช่วยให้นักพัฒนาสามารถแก้ไขข้อผิดพลาดในระบบ Authentication ได้ตรงจุด

คำถามที่พบบ่อยเกี่ยวกับการทำงานของโทเค็น

นักพัฒนาหลายคนมักมีข้อสงสัยว่าการถอดรหัส JWT มีความหมายเหมือนกับการตรวจสอบความถูกต้องหรือไม่ คำตอบคือไม่เหมือนกัน การถอดรหัสเป็นเพียงการแปลงข้อมูลจากรูปแบบ Base64URL กลับมาเป็นข้อความปกติที่อ่านได้โดยไม่ต้องใช้รหัสลับใดๆ ในขณะที่การตรวจสอบความถูกต้องจำเป็นต้องใช้รหัสลับเพื่อยืนยันว่าข้อมูลไม่ได้ถูกเปลี่ยนแปลง หากต้องการทราบว่าโทเค็นจะหมดอายุเมื่อใด คุณสามารถนำโทเค็นมาวางในตัวถอดรหัส JWT เครื่องมือจะดึงค่า exp ออกมาและแปลงจาก Unix Timestamp เป็นวันที่และเวลามาตรฐานให้คุณเห็นโดยอัตโนมัติ ตัวอย่างเช่น หากค่าในระบบคือ 1,735,689,600 เครื่องมือจะแสดงผลเป็นวันที่ 1 มกราคม 2568 ตามเวลาสากล ทำให้คุณรู้ได้ทันทีว่าผู้ใช้จะต้องทำการขอโทเค็นใหม่เมื่อใด

ความปลอดภัยและปัญหาในการถอดรหัส

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

คำถามที่เราตอบบ่อยที่สุด

การถอดรหัส JWT กับการตรวจสอบความถูกต้องเหมือนกันหรือไม่

การถอดรหัสเป็นเพียงการ แปลงข้อมูลจากรูปแบบ Base64Url กลับมาเป็นข้อความ JSON ที่อ่านออกได้เท่านั้น ส่วนการตรวจสอบความถูกต้องคือการนำลายเซ็นดิจิทัลมาคำนวณร่วมกับคีย์ลับเพื่อยืนยันว่าข้อมูลไม่ได้ถูกดัดแปลง ตัวถอดรหัส JWT ของเราจะทำหน้าที่เพียงแค่แสดงผลข้อมูลที่ซ่อนอยู่โดยไม่ได้ตรวจสอบลายเซ็น

จะตรวจสอบได้อย่างไรว่าโทเคนของฉันหมดอายุเมื่อไหร่

คุณสามารถนำโทเคนมาวางในตัวถอดรหัส JWT เพื่อดูข้อมูลในส่วน Payload ระบบจะแปลงค่า exp ซึ่งปกติจะอยู่ในรูปแบบ Unix Timestamp ให้เป็นเวลามาตรฐานที่มนุษย์อ่านเข้าใจได้ทันที ทำให้คุณรู้ได้ทันทีว่าโทเคนนั้นหมดอายุไปแล้วหรือยัง

การนำโทเคนจากระบบ Production มาวางที่นี่ปลอดภัยหรือไม่

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

ทำไมโทเคนของฉันถึงถอดรหัสไม่ได้

ปัญหานี้มักเกิดจากโทเคนมีรูปแบบไม่ถูกต้องตามมาตรฐาน โทเคนที่สมบูรณ์จะต้องประกอบด้วยสามส่วน ได้แก่ Header Payload และ Signature โดยคั่นด้วยจุด หากโทเคนของคุณขาดส่วนใดส่วนหนึ่งไป ระบบจะไม่สามารถถอดรหัสได้ คุณอาจต้องตรวจสอบว่าสตริงที่คัดลอกมานั้นครบถ้วนหรือไม่

ฉันสามารถแก้ไขข้อมูล Payload แล้วแปลงกลับเป็น JWT ผ่านเครื่องมือนี้ได้ไหม

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

จำเป็นต้องใช้คีย์ลับในการถอดรหัสโทเคนหรือไม่

ไม่จำเป็นต้องใช้คีย์ลับใดๆ ในการใช้งานตัวถอดรหัส JWT เนื่องจากส่วน Header และ Payload ของโทเคนไม่ได้ถูกเข้ารหัสเพื่อซ่อนข้อมูล แต่เป็นการเข้ารหัสแบบ Base64Url เพื่อให้ส่งผ่านเครือข่ายได้ง่าย หากคุณต้องการทดลองแปลงข้อความกลับไปมา สามารถใช้ เครื่องมือเข้ารหัส Base64 เพื่อทำความเข้าใจการทำงานพื้นฐานได้