นักพัฒนา

ตัวถอดรหัส JWT

วาง JWT ใดก็ได้เพื่อถอดรหัส header และ payload ได้ทันที — ตรวจสอบ claims เวลาหมดอายุ และลายเซ็น โดยไม่ต้องออกจากเบราว์เซอร์หรือส่งข้อมูลไปที่ใด

เครื่องมือนี้ช่วยคุณได้ไหม?

ตัวถอดรหัส JWT คืออะไร?

JWT (JSON Web Token) เป็นวิธีมาตรฐานที่ API เว็บสมัยใหม่ใช้แสดง claims สำหรับการยืนยันตัวตนและการอนุญาต เป็นโทเคนที่กระชับและครบในตัว ประกอบด้วยสามส่วน — header ที่อธิบายอัลกอริทึมการเซ็น payload ที่บรรจุ claims จริง (เช่น ID ผู้ใช้ บทบาท และเวลาหมดอายุ) และ signature ที่ทำให้เซิร์ฟเวอร์ผู้รับสามารถตรวจสอบว่าโทเคนไม่ถูกแก้ไข เครื่องถอดรหัสนี้อ่าน header และ payload ได้ทันที เพื่อให้คุณดีบักปัญหาด้านการยืนยันตัวตน ตรวจสอบว่า API ส่ง claims อะไรบ้าง หรือตรวจสอบว่าโทเคนหมดอายุเมื่อใด — ทั้งหมดโดยไม่ต้องใช้ backend เครื่องมือ CLI หรือวางโทเคนที่ละเอียดอ่อนลงในเซิร์ฟเวอร์ของบุคคลที่สาม เนื่องจากทุกอย่างทำงานในเบราว์เซอร์ของคุณ

เมื่อไหร่ควรใช้เครื่องคำนวณนี้

  • แก้ไขปัญหาว่าทำไม API จึงปฏิเสธโทเคน โดยการตรวจสอบ claims และเวลาหมดอายุ
  • ตรวจสอบเวลาหมดอายุของโทเคนระหว่างการตรวจสอบปัญหาสนับสนุนหรือการตอบสนองต่อเหตุการณ์
  • การตรวจสอบว่าผู้ให้บริการ SSO หรือ OAuth ออกคลังข้อมูลที่แอปพลิเคชันของคุณคาดหวัง
  • เรียนรู้โครงสร้างของ JWT เพื่อเตรียมสัมภาษณ์งานหรือการเรียนด้านความปลอดภัย
  • ตรวจสอบโทเคนที่จับได้จากเครื่องมือนักพัฒนาของเบราว์เซอร์หรือบันทึกของเซิร์ฟเวอร์เพื่อทำความเข้าใจเนื้อหา
  • เปรียบเทียบอัลกอริทึมส่วนหัวระหว่างโทเคนเพื่อแก้ไขปัญหาการยืนยันตัวตนที่ล้มเหลวจากอัลกอริทึมไม่ตรงกัน

ขั้นตอน:

  1. วาง JWT ของคุณลงในช่องป้อนข้อมูล หรือคลิก "โหลดตัวอย่าง" เพื่อลองใช้
  2. header และ payload จะถูกถอดรหัสโดยอัตโนมัติขณะที่คุณพิมพ์
  3. ตรวจสอบ claims เช่น iss, sub, exp และ iat ในรูปแบบที่อ่านได้ง่าย
  4. claims ประเภทเวลา (exp, iat, nbf) จะถูกแปลงเป็นวันที่ที่อ่านได้โดยอัตโนมัติ

สูตร

JWT = base64Url(header) + "." + base64Url(payload) + "." + base64Url(signature) การถอดรหัส: แยกด้วย "." ถอดรหัส base64Url ของสองส่วนแรก แล้ว parse เป็น JSON การตรวจสอบ (ไม่ได้ทำที่นี่): HMACSHA256(base64Url(header) + "." + base64Url(payload), secret) === signature

กรณีใช้งาน

  • แก้ไขปัญหาว่าทำไม API จึงปฏิเสธโทเคน โดยการตรวจสอบ claims ของมัน
  • ตรวจสอบเวลาหมดอายุของโทเคนระหว่างการตรวจสอบปัญหาสนับสนุน
  • ยืนยันว่าผู้ให้บริการ SSO หรือ OAuth ออก claims ตามที่คาดไว้
  • เรียนรู้โครงสร้างของ JWT เพื่อเตรียมสัมภาษณ์งานหรือการเรียน
  • ตรวจสอบโทเคนที่คัดลอกจากเครื่องมือนักพัฒนาของเบราว์เซอร์หรือบันทึกของเซิร์ฟเวอร์ได้อย่างรวดเร็ว

ประโยชน์หลัก

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

เคล็ดลับ

  • ตรวจสอบ 'exp' ก่อนเสมอเมื่อแก้ไขปัญหา "unauthorized" — โทเคนที่หมดอายุคือสาเหตุที่พบบ่อยที่สุด
  • เทียบ 'alg' ใน header กับสิ่งที่แบ็กเอนด์ของคุณคาดหวัง เพื่อตรวจจับข้อผิดพลาดจากอัลกอริทึมไม่ตรงกัน
  • อย่าเชื่อ payload ที่ถอดรหัสแล้วว่าเป็นหลักฐานยืนยันตัวตนโดยไม่ตรวจสอบลายเซ็นที่ฝั่งเซิร์ฟเวอร์
  • ใช้โทเคนอายุสั้นร่วมกับ refresh token แทนที่จะใช้ JWT อายุยาว เพื่อลดความเสียหายหากรั่วไหล

ข้อผิดพลาดที่พบบ่อย

  • สันนิษฐานว่า JWT ที่ถอดรหัสแล้วคือ JWT ที่ผ่านการตรวจสอบแล้ว — การถอดรหัสเป็นเพียงการอ่านเนื้อหา ไม่ได้ยืนยันความถูกต้องแท้จริง
  • เก็บข้อมูลที่ละเอียดอ่อน (รหัสผ่าน คีย์ลับ) ไว้ใน payload โดยลืมไปว่าใครก็อ่านได้
  • วางโทเคนจากระบบจริงลงในตัวถอดรหัสออนไลน์ที่ไม่น่าเชื่อถือ
  • สับสนระหว่าง 'exp' (เวลาหมดอายุ) กับ 'iat' (เวลาที่ออกโทเคน) เมื่อแก้ไขปัญหาอายุการใช้งานของโทเคน

คำศัพท์สำคัญ

Claim: ข้อมูลที่ยืนยันเกี่ยวกับผู้ใช้ เช่น user ID หรือบทบาท
Header: ส่วนแรกของ JWT ระบุอัลกอริทึมการเซ็นและประเภทของโทเคน
Payload: ส่วนที่สองของ JWT ที่บรรจุ claims จริง
Signature: ส่วนที่สามของ JWT ใช้ตรวจสอบว่าโทเคนไม่ถูกเปลี่ยนแปลง

แนวคิดที่เกี่ยวข้อง

ตัวอย่าง

โทเคนที่ขึ้นต้นด้วย eyJhbGciOiJIUzI1NiJ9 จะถอดรหัสเป็น header {"alg":"HS256","typ":"JWT"} — บอกว่าโทเคนนี้เซ็นด้วย HMAC-SHA256

การตีความผลลัพธ์

ตัวถอดรหัสจะแบ่ง JWT ที่ตัวคั่นจุดสองตำแหน่งและถอดรหัสสองส่วนแรกด้วย Base64URL ส่วนหัวจะบอกอัลกอริทึมการลงนาม (เช่น HS256 หรือ RS256) และประเภทของโทเค็น ส่วน payload จะมี claims จริง — ข้อมูลประจำตัวผู้ใช้ สิทธิ์ และการประทับเวลา claims ประเภทเวลาประทับ (exp, iat, nbf) จะถูกแปลงจาก Unix epoch เป็นวันที่อ่านได้โดยอัตโนมัติ หาก 'exp' แสดงวันที่ในอดีต แสดงว่าโทเค็นหมดอายุและเซิร์ฟเวอร์ส่วนใหญ่จะปฏิเสธ claim 'sub' (subject) มักมีรหัสผู้ใช้ และ 'iss' (issuer) ระบุเซิร์ฟเวอร์ที่สร้างโทเค็น โปรดจำไว้ว่าการถอดรหัสไม่ใช่การตรวจสอบความถูกต้อง ส่วนลายเซ็นจะแสดงขึ้นแต่ไม่สามารถตรวจสอบได้หากไม่มีคีย์ลับหรือคีย์สาธารณะ payload ที่ถอดรหัสแล้วเป็นเพียงข้อมูลประกอบ — ห้ามเชื่อถือว่าเป็นหลักฐานยืนยันตัวตนโดยไม่มีการตรวจสอบลายเซ็นฝั่งเซิร์ฟเวอร์

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

JWT คืออะไร?
JSON Web Token (JWT) เป็นวิธีที่กระชับและปลอดภัยสำหรับ URL ในการแสดง claims ระหว่างสองฝ่าย ประกอบด้วยสามส่วนที่เข้ารหัส Base64URL คั่นด้วยจุด ได้แก่ header, payload และ signature
การวาง JWT ลงในเครื่องมือนี้ปลอดภัยหรือไม่?
การถอดรหัสเกิดขึ้นทั้งหมดในเบราว์เซอร์ของคุณโดยใช้ JavaScript — โทเคนจะไม่ถูกส่งไปยังเซิร์ฟเวอร์ใดเลย อย่างไรก็ตาม ควรปฏิบัติกับ JWT เหมือนรหัสผ่าน หลีกเลี่ยงการวางโทเคนจากระบบจริงลงในเครื่องมือออนไลน์ใดๆ รวมถึงเครื่องมือนี้ด้วย
ทำไมเครื่องมือนี้จึงตรวจสอบลายเซ็นไม่ได้?
การตรวจสอบลายเซ็นของ JWT ต้องใช้คีย์ลับ (สำหรับอัลกอริทึม HMAC) หรือคีย์สาธารณะ (สำหรับอัลกอริทึม RSA/ECDSA) ซึ่งมีเพียงเซิร์ฟเวอร์ผู้ออกโทเคนเท่านั้นที่ควรมี เครื่องมือนี้ถอดรหัสเฉพาะ header และ payload ที่อ่านได้เท่านั้น — ไม่มีสิทธิ์เข้าถึงคีย์นั้น
claim 'exp' หมายถึงอะไร?
'exp' (Expiration Time) คือ Unix timestamp ที่บ่งบอกเวลาที่โทเคนจะหมดอายุ เครื่องมือนี้จะแปลงค่านี้เป็นวันที่ที่อ่านได้โดยอัตโนมัติ เพื่อให้คุณตรวจสอบว่าโทเคนหมดอายุหรือยังได้อย่างรวดเร็ว
JWT คืออะไร?
JSON Web Token (JWT) เป็นวิธีที่กะทัดรัดและปลอดภัยสำหรับ URL ในการแสดงข้อเรียกร้องระหว่างสองฝ่าย ประกอบด้วยส่วนที่เข้ารหัส Base64URL สามส่วนที่คั่นด้วยจุด: ส่วนหัว เนื้อหา และลายเซ็น
การวาง JWT ลงในเครื่องมือนี้ปลอดภัยหรือไม่?
อัลกอริทึมที่พบบ่อย ได้แก่ HS256 (HMAC-SHA256 แบบสมมาตร), RS256 (RSA-SHA256 แบบไม่สมมาตร) และ ES256 (ECDSA) ฟิลด์ 'alg' ในส่วนหัวจะระบุอัลกอริทึม ที่พบมากที่สุดสำหรับ API เว็บคือ HS256 หรือ RS256
ทำไมเครื่องมือนี้จึงตรวจสอบลายเซ็นไม่ได้?
'iat' (เวลาที่ออก) คือเวลาที่สร้างโทเค็น 'nbf' (ไม่ก่อนเวลา) คือเวลาที่โทเค็นเริ่มมีผล หาก 'nbf' อยู่ในอนาคต ควรปฏิเสธโทเค็นแม้ว่าจะยังไม่หมดอายุ
claim 'exp' หมายถึงอะไร?
ส่วนหัวและเพย์โหลดเป็นเพียงการเข้ารหัส Base64URL ไม่ใช่การเข้ารหัสแบบลับ ทุกคนสามารถอ่านได้ ห้ามจัดเก็บรหัสผ่าน ความลับ หรือข้อมูลส่วนบุคคลที่ละเอียดอ่อนในเพย์โหลดของ JWT ให้ใส่เฉพาะคลังข้อมูลที่ไม่ละเอียดอ่อน เช่น ID ผู้ใช้ บทบาท และการประทับเวลา
JWT สามารถใช้อัลกอริทึมใดได้บ้าง?
โทเค็นเข้าถึงมักมีอายุ 15–60 นาที โทเค็นรีเฟรชมีอายุตั้งแต่ไม่กี่ชั่วโมงจนถึงหลายวัน โทเค็นเข้าถึงอายุสั้นควบคู่กับโทเค็นรีเฟรชอายุยาวช่วยสร้างสมดุลระหว่างความปลอดภัยและประสบการณ์ผู้ใช้
จะคัดลอกคลังข้อมูลที่ถอดรหัสแล้วได้อย่างไร?
โทเค็นรีเฟรชคือโทเค็นอายุยาวที่ใช้เพื่อรับโทเค็นเข้าถึงใหม่โดยไม่ต้องให้ผู้ใช้ยืนยันตัวตนอีกครั้ง เมื่อโทเค็นเข้าถึงอายุสั้นหมดอายุ ไคลเอ็นต์จะส่งโทเค็นรีเฟรชเพื่อรับโทเค็นเข้าถึงใหม่
จะคัดลอกคลังข้อมูลที่ถอดรหัสแล้วได้อย่างไร?
ส่วนหัวและเพย์โหลดที่ถอดรหัสแล้วจะแสดงเป็น JSON ที่จัดรูปแบบ คุณสามารถคัดลอกผลลัพธ์ที่ถอดรหัสทั้งหมดหรือค่าคลังข้อมูลแต่ละรายการเพื่อการดีบักหรือการจัดทำเอกสาร

ค้นพบเครื่องมือเพิ่มเติม

คัดสรรใหม่จากคลังเครื่องมือทั้งหมดของเรา