tigtools

ตัวถอดรหัส JWT

วาง JWT เพื่ออ่าน header และ claims และดูเวลาหมดอายุ การถอดรหัสเกิดขึ้นในเบราว์เซอร์ของคุณและไม่ได้ตรวจสอบลายเซ็น

ทำงานในเบราว์เซอร์ของคุณ ไม่ต้องสมัคร

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

วิธีใช้งาน

  1. คัดลอกโทเค็นจาก header Authorization, คุกกี้ หรือเครื่องมือนักพัฒนาของเบราว์เซอร์ คำนำหน้า “Bearer ” จะถูกตัดออกโดยอัตโนมัติ
  2. วางลงในช่อง header และ payload จะแสดงเป็น JSON ที่จัดรูปแบบแล้ว
  3. ตรวจสอบบรรทัดสถานะและตาราง claims เพื่อดู issuer, audience และเวลาหมดอายุในเวลาท้องถิ่นของคุณ
  4. คัดลอก JSON ของ header หรือ payload หากต้องการนำไปใช้ที่อื่น

วิธีการทำงาน

JSON Web Token (JWT, RFC 7519) ในรูปแบบที่มีการลงนามทั่วไป (JWS) ประกอบด้วยสามส่วนที่เข้ารหัส base64url คั่นด้วยจุด ส่วนหัวระบุอัลกอริทึมที่ใช้ลงนามโทเค็น เช่น HS256 (HMAC กับ SHA-256) หรือ RS256 (RSA) เพย์โหลดประกอบด้วย claims ซึ่งเป็นข้อความเกี่ยวกับผู้ใช้และตัวโทเค็นเอง ลายเซ็นช่วยให้เซิร์ฟเวอร์ตรวจสอบได้ว่าส่วนหัวและเพย์โหลดไม่ถูกเปลี่ยนแปลง

ส่วนหัวและเพย์โหลดถูกเข้ารหัส (encoded) เท่านั้น ไม่ได้เข้ารหัสลับ (encrypted) ใครก็ตามที่มีโทเค็นสามารถอ่านเนื้อหาได้ ซึ่งเป็นสิ่งที่เครื่องมือนี้ทำ อย่าใส่ความลับลงในเพย์โหลด JWT

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

registered claims อธิบายไว้ในตาราง exp nbf และ iat เป็นค่า NumericDate: วินาทีนับตั้งแต่วันที่ 1 มกราคม 1970 UTC เครื่องมือจะแปลงค่าเหล่านี้เป็นวันที่ตามเขตเวลาของคุณ และเปรียบเทียบกับนาฬิกาของอุปกรณ์ โดยไม่มีช่วงเผื่อเล็กน้อยที่เซิร์ฟเวอร์มักอนุญาตสำหรับความคลาดเคลื่อนของนาฬิกา หากนาฬิกาของคุณไม่ตรง สถานะก็จะไม่ถูกต้องด้วย

โทเค็นที่มีห้าส่วนคือ JWT ที่เข้ารหัสลับ (JWE) เพย์โหลดของโทเค็นไม่สามารถถอดรหัสได้หากไม่มีคีย์ ดังนั้นเครื่องมือจึงรายงานเฉพาะรูปแบบเท่านั้น

ตัวอย่าง

ทำไม API ของฉันจึงส่ง 401 กลับมา?

ถอดรหัส access token ที่แอปของคุณส่ง หากบรรทัดสถานะระบุว่า “หมดอายุเมื่อ …” ไคลเอนต์จำเป็นต้องรีเฟรชโทเค็น หาก aud แสดง https://api.example.com แต่คุณกำลังเรียก https://api2.example.com แสดงว่า audience ไม่ตรงกัน

การตรวจสอบ OpenID Connect ID token

โทเค็น ID จากผู้ให้บริการล็อกอินประกอบด้วย iss (ผู้ให้บริการ), sub (รหัสผู้ใช้ถาวร), aud (client ID ของคุณ), iat และ exp รวมถึง claims โปรไฟล์ เช่น อีเมลและชื่อ เมื่อถอดรหัสจะเห็นว่าแอปของคุณได้รับ claims ใดบ้างจริง ๆ

การอ่านค่า timestamp claim

payload มีค่า "exp": 1735689600 ตาราง claims แสดงเป็นวันที่ 1 มกราคม 2025, 00:00:00 UTC ซึ่งแปลงเป็นเวลาท้องถิ่นของคุณแล้ว พร้อมบอกว่าผ่านมานานเท่าใดแล้ว หรือยังเหลือเวลาอีกเท่าใดในอนาคต

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

เครื่องมือนี้ตรวจสอบลายเซ็น JWT หรือไม่

ไม่ เครื่องมือนี้ถอดรหัสเฉพาะ header และ payload เท่านั้น การตรวจสอบความถูกต้องต้องใช้ secret (สำหรับ HS256) หรือคีย์สาธารณะของผู้ออกโทเค็น (สำหรับ RS256 และ ES256) และควรทำบนเซิร์ฟเวอร์ของคุณด้วยไลบรารีที่เชื่อถือได้

วางโทเค็นของฉันที่นี่ปลอดภัยไหม

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

ทำไมทุกคนจึงอ่าน payload ได้

JWT ที่ลงนามถูกเข้ารหัสด้วย base64url ซึ่งไม่ใช่การเข้ารหัสลับ ลายเซ็นช่วยป้องกันโทเค็นจากการถูกแก้ไขเท่านั้น ไม่ได้ป้องกันการอ่าน หากข้อมูลต้องเป็นความลับ ควรใช้ JWT แบบเข้ารหัส (JWE) หรือเก็บข้อมูลไว้บนเซิร์ฟเวอร์

“exp” หมายถึงอะไร และมีหน่วยเป็นอะไร

exp คือเวลาหมดอายุในรูปแบบ NumericDate: จำนวนวินาทีเต็ม (ไม่ใช่มิลลิวินาที) นับจาก 1970-01-01 00:00:00 UTC โทเค็นจะต้องถูกปฏิเสธเมื่อถึงเวลานั้นหรือหลังจากนั้น

ทำไมจึงขึ้นว่า “not valid base64url”

โทเค็นอาจถูกตัดหรือเปลี่ยนแปลงระหว่างการคัดลอก เช่น ตัวอักษรท้ายหายไป มีเครื่องหมายคำพูดครอบ หรือถูกเข้ารหัส URL (%2E แทนจุด) วางโทเค็นต้นฉบับให้ตรงตามที่ออกมาให้ทุกตัวอักษร

ความเป็นส่วนตัว

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