ตัวถอดรหัส JWT
ถอดรหัส ตรวจสอบ และเซ็น JSON Web Token ใหม่ได้ทันที — ทำงานทั้งหมดในเบราว์เซอร์ของคุณ
สร้างและเซ็น JWT ตั้งแต่ต้นในเบราว์เซอร์ของคุณ คีย์จะไม่ออกจากหน้านี้
การถอดรหัส JWT แบบฝั่งไคลเอนต์ทำงานอย่างไร — และทำไมมันถึงสำคัญ
JSON Web Token อาจดูเหมือนกลุ่มตัวอักษรที่อ่านไม่ออก แต่แท้จริงแล้วมันคือสามส่วนที่เข้ารหัสแบบ Base64URL เชื่อมกันด้วยจุด ได้แก่ header, payload และ signature การถอดรหัส header และ payload ไม่ใช่การเข้ารหัสลับแต่อย่างใด — ใครก็ตามที่มีโทเค็นนี้สามารถอ่าน claims ข้างในได้ ซึ่งเป็นเหตุผลว่าทำไมข้อมูลสำคัญจึงไม่ควรถูกยัดใส่ไว้ใน payload ของ JWT ปัญหาคือโทเค็นที่คนต้องการตรวจสอบมักไม่ใช่ข้อมูลทดสอบทั่วไปที่ทิ้งขว้างได้ หลายครั้งมันคือโทเค็นเซสชันที่ใช้งานจริงจากแอปโปรดักชัน โทเค็นสำหรับเข้าถึง API หรือคุกกี้ล็อกอินที่ดึงมาจาก dev tools ของเบราว์เซอร์ตอนกำลังดีบัก — นั่นคือข้อมูลรับรองตัวตนจริงที่หากตกไปอยู่ในมือผิดคนก็สามารถใช้เข้าถึงระบบได้จริง การวางโทเค็นนั้นลงในเว็บไซต์ที่ไม่รู้จักก็เท่ากับมอบเซสชันของคุณให้กับเซิร์ฟเวอร์ที่คุณไม่รู้จักเลย
เครื่องมือนี้ไม่ทำแบบนั้นเด็ดขาด header และ payload จะถูกถอดรหัสด้วย JavaScript ธรรมดาที่ทำงานอยู่ในเบราว์เซอร์ของคุณทันทีที่วางโทเค็นลงไป — แยกตามจุด ถอดรหัส Base64URL แล้วแปลงเป็น JSON — และไม่มีข้อมูลใดถูกส่งออกไปไหนเลย การตรวจสอบลายเซ็นก็ทำงานในลักษณะเดียวกัน โดยใช้ Web Crypto API (`SubtleCrypto`) ที่มีอยู่ในตัวของเบราว์เซอร์สมัยใหม่ทุกตัว อัลกอริทึม HMAC (HS256, HS384, HS512) จะถูกตรวจสอบกับ secret ที่คุณพิมพ์เข้าไป ส่วนอัลกอริทึม RSA (RS256, RS384, RS512) จะถูกตรวจสอบกับกุญแจสาธารณะที่คุณวางในรูปแบบ PEM ทั้ง secret สำหรับเข้ารหัสและกระบวนการตรวจสอบทั้งหมดอยู่ในแท็บนี้เท่านั้น เมื่อรีเฟรชหน้าเว็บ ทุกอย่าง — โทเค็น secret และกุญแจ — จะหายไปทันที
วางโทเค็นเพื่อดู header และ payload ที่จัดรูปแบบให้อ่านง่าย พร้อมแสดงค่า claims มาตรฐานอย่าง `exp`, `iat` และ `nbf` ที่แปลงเป็นวันที่อ่านง่าย พร้อมป้ายกำกับ "หมดอายุแล้ว" ที่ชัดเจนหาก `exp` ของโทเค็นผ่านไปแล้ว — มีประโยชน์มากในการยืนยันว่ารายงานบั๊ก "ผมถูกล็อกเอาต์" ที่แจ้งเข้ามานั้นแท้จริงแล้วเป็นเพียงโทเค็นที่หมดอายุหรือไม่ หากอัลกอริทึมคือ HS256/384/512 หรือ RS256/384/512 ให้ป้อน secret หรือกุญแจสาธารณะที่ตรงกันเพื่อตรวจสอบว่าลายเซ็นเป็นของแท้หรือถูกดัดแปลง อัลกอริทึมนอกกลุ่มนี้ (เช่น ES256 หรือแบบไม่เซ็น `none`) ยังคงถอดรหัสได้ตามปกติ แต่จะไม่มีการตรวจสอบให้ เพื่อไม่ให้ผลลัพธ์ที่แสดงออกมาดูน่าเชื่อถือทั้งที่ไม่ได้ตรวจสอบจริง สำหรับการพัฒนาในเครื่อง กล่อง header/payload ที่แก้ไขได้ช่วยให้คุณปรับแต่ง claim ได้ เช่น เปลี่ยน user ID หรือ role แล้วเซ็นโทเค็นใหม่ด้วย HS256 secret ตัวเดียวกับที่เซิร์ฟเวอร์ทดสอบของคุณใช้ ซึ่งเป็นวิธีที่นิยมใช้ทดสอบตรรกะการให้สิทธิ์โดยไม่ต้องสร้างขั้นตอนล็อกอินแบบเต็มรูปแบบ
เนื่องจาก payload ของ JWT เมื่อถอดรหัสแล้วก็เป็นเพียง JSON ธรรมดาที่อ่านได้ มันจึงเข้ากันได้ดีกับเครื่องมือ JSON Formatter & Validator หากคุณต้องการตรวจสอบ claim ที่ซ้อนกันลึกๆ ให้ละเอียดยิ่งขึ้น ข้อควรระวังด้านความปลอดภัยที่ควรย้ำอีกครั้ง: เนื่องจากการถอดรหัสไม่ต้องใช้ secret ใดๆ เลย ให้ถือว่าโทเค็นทุกตัวเป็นข้อมูลอ่อนไหวทันทีที่คุณตรวจสอบเสร็จ และควรหมุนเวียน (rotate) ข้อมูลรับรองตัวตนที่ตั้งใจให้มีอายุสั้นอยู่แล้ว หากคุณไม่แน่ใจว่ามันเคยถูกวางไว้ที่ไหนมาก่อนที่จะมาถึงที่นี่
คำถามที่พบบ่อย
เครื่องมือนี้ตรวจสอบลายเซ็นของ JWT ได้ด้วยไหม ไม่ใช่แค่ถอดรหัส
ได้ รองรับการตรวจสอบลายเซ็นทั้งแบบ HMAC (HS256/384/512) และ RSA (RS256/384/512)
โทเค็นหรือ secret ของฉันถูกส่งไปที่ไหนหรือไม่
ไม่ การถอดรหัส การตรวจสอบ และการเซ็นใหม่ทั้งหมดทำในเบราว์เซอร์ของคุณด้วย Web Crypto API
แก้ไข payload แล้วสร้างโทเค็นที่เซ็นใหม่ได้ไหม
ได้ แก้ไข JSON ของเฮดเดอร์/payload แล้วเซ็นใหม่ด้วย HMAC secret เพื่อรับโทเค็นใหม่