ข้ามไปยังเนื้อหาหลัก
FreeOnlineTools Go
ไทย
วิธี

วิธีถอดรหัส JWT และตรวจสอบ Claims อย่างปลอดภัย

โดย FreeOnlineTools Team · อัปเดตเมื่อ 2026-08-28

ตอบด่วน

JWT คือสตริง Base64URL สามส่วนคั่นจุด: header.payload.signature ถอด header และ payload ด้วย Base64URL decoding เพื่อตรวจ claims —แต่การถอดอ่านข้อมูลเท่านั้น ไม่พิสูจน์ความถูกต้อง ตรวจ signature ที่ server เสมอ ใช้ JWT Decoder ของเรา

การแนะนำ

JSON Web Token (JWT, RFC 7519) เป็นรูปแบบ token กระชับ URL-safe สำหรับ authentication และ authorization มีสามส่วน Base64URL encode คั่นจุด: header.payload.signature header อธิบาย algorithm, payload มี claims (user id, roles, expiry), signature พิสูจน์ว่า token ออกโดยฝ่ายที่ไว้ใจ สำคัญ: header และ payload encode ไม่ได้ encrypt —ทุกคนอ่านได้

ทีละขั้นตอน

  1. แบ่งโทเค็นออกเป็นสามส่วน

    JWT ดูเหมือน xxxxx.yyyy.zzzzz แยกอักขระจุดเพื่อรับส่วนหัว (ตอนที่ 0) เพย์โหลด (ตอนที่ 1) และลายเซ็น (ตอนที่ 2) หากไม่มีสามส่วนพอดี แสดงว่าโทเค็นมีรูปแบบไม่ถูกต้อง

  2. Base64URL ถอดรหัสส่วนหัว

    ส่วนหัวเป็นออบเจ็กต์ JSON ที่เข้ารหัส Base64URL เช่น {"alg": HS256 "typ": "__ KEEP_18__"} Base64URL ใช้ - และ _ แทน + และ / และละเว้นช่องว่างภายใน ถอดรหัส จากนั้น JSON.parse เพื่ออ่านอัลกอริทึมและพิมพ์ ตัวถอดรหัส JWT ของเราทำสิ่งนี้โดยอัตโนมัติ

  3. Base64URL ถอดรหัสเพย์โหลด (การอ้างสิทธิ์)

    เพย์โหลดเป็นวัตถุ JSON ของการอ้างสิทธิ์ การเรียกร้องที่ลงทะเบียน ได้แก่ iss (ผู้ออก), sub (เรื่อง), aud (ผู้ชม), exp (หมดอายุ), nbf (ไม่ก่อน), iat (ออกที่) และ jti (รหัสโทเค็น) การเรียกร้องส่วนตัวจะขึ้นอยู่กับแอปพลิเคชันเฉพาะ (เช่น บทบาท อีเมล) ถอดรหัสและตรวจสอบแต่อย่าไว้วางใจจนกว่าจะได้รับการตรวจสอบ

  4. ตรวจสอบวันหมดอายุและไม่ก่อนเคลม

    exp และ nbf เป็นการประทับเวลา Unix (วินาที) หากเวลาปัจจุบันเลยเวลา exp ไปแล้ว โทเค็นจะหมดอายุและจะต้องถูกปฏิเสธ หากเวลาปัจจุบันก่อน nbf แสดงว่าโทเค็นยังไม่ถูกต้อง ตรวจสอบ UX ฝั่งไคลเอ็นต์เหล่านี้ แต่บังคับใช้ฝั่งเซิร์ฟเวอร์เพื่อความปลอดภัย

  5. ตรวจสอบลายเซ็นบนเซิร์ฟเวอร์ (ไม่ใช่ฝั่งไคลเอ็นต์)

    ลายเซ็นคือ HMAC-SHA256(secret, header.payload) สำหรับ HS256 หรือลายเซ็น RSA/ECDSA สำหรับ RS256/ES256 การยืนยันต้องใช้รหัสลับหรือรหัสสาธารณะซึ่งจะต้องเข้าถึงเบราว์เซอร์ไม่ได้ ใช้ไลบรารีเช่น jsonwebtoken (Node) หรือ jose เพื่อยืนยัน —อย่าเขียน crypto ของคุณเอง

ตัวอย่าง

JWT ทั่วไป (สามส่วน)

ป้อนข้อมูล: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpmeJf36POk6yJV_adQssw5c

เอาท์พุต: Header: {"alg":"HS256","typ":"JWT"} Payload: {"sub":"1234567890","name":"John Doe","iat":1516239022}

เพย์โหลดที่ถอดรหัสพร้อมการอ้างสิทธิ์มาตรฐาน

ป้อนข้อมูล: เพย์โหลดของโทเค็นการตรวจสอบสิทธิ์จริง

เอาท์พุต: {"sub":"user-42","iss":"freeonlinetoolsgo.com","exp":1767229200,"iat":1767225600,"role":"admin"}

การตรวจจับโทเค็นหมดอายุ

ป้อนข้อมูล: exp: 1609459200 (2021-01-01) ตรวจสอบเมื่อ 2026-08-28

เอาท์พุต: Token is expired —current time (1767225600) > exp (1609459200). Reject and prompt re-login.

ปัญหาทั่วไป

  • การถอดรหัสถือเป็นการยืนยัน: ใครๆ ก็สามารถสร้าง JWT ด้วยการอ้างสิทธิ์และลายเซ็นปลอมได้ การถอดรหัสจะอ่านเพย์โหลดแต่ไม่ได้พิสูจน์อะไรเลย ตรวจสอบลายเซ็นด้วยรหัสลับ/สาธารณะบนเซิร์ฟเวอร์ทุกครั้งก่อนที่จะเชื่อถือการอ้างสิทธิ์
  • การใช้อัลกอริทึม 'none': ข้อมูลจำเพาะ JWT อนุญาต alg: none สำหรับโทเค็นที่ไม่ปลอดภัย หากผู้ตรวจสอบของคุณยอมรับ alg: ไม่มี ผู้โจมตีสามารถปลอมแปลงโทเค็นได้ กำหนดค่าไลบรารีของคุณให้ปฏิเสธเลยและอนุญาตอัลกอริธึมที่คาดหวังไว้
  • การจัดเก็บ JWT ใน localStorage: XSS สามารถอ่าน localStorage และ exfiltrate โทเค็นได้ ต้องการคุกกี้ httpOnly, Secure, SameSite=Strict สำหรับโทเค็นเซสชัน หรือโทเค็นในหน่วยความจำอายุสั้นพร้อมคุกกี้โทเค็นการรีเฟรช
  • ไม่ตรวจสอบ exp/aud/iss: โทเค็นที่ถูกขโมยจะใช้ได้จนกว่าจะหมดอายุ ตรวจสอบ exp (หมดอายุ), aud (กลุ่มเป้าหมาย) และ is (ผู้ออก) ในทุกคำขอเพื่อป้องกันการเล่นโทเค็นซ้ำในบริการต่างๆ

เคล็ดลับ

  • ใช้โทเค็นการเข้าถึงที่มีอายุสั้น (15 นาที) บวกกับโทเค็นการรีเฟรชที่มีอายุยาวนาน ซึ่งจะจำกัดหน้าต่างหากโทเค็นการเข้าถึงถูกขโมย
  • ต้องการ RS256 (ไม่สมมาตร) มากกว่า HS256 (สมมาตร) เมื่อบริการหลายรายการตรวจสอบโทเค็น: แต่ละบริการได้รับรหัสสาธารณะ และมีเพียงผู้ออกเท่านั้นที่มีรหัสส่วนตัว
  • ใช้ตัวถอดรหัส JWT ของเราในระหว่างการพัฒนาเพื่อตรวจสอบสิ่งที่เซิร์ฟเวอร์ออก โดยจะแสดงส่วนหัวที่ถอดรหัส เพย์โหลด และสรุปการอ้างสิทธิ์ที่มนุษย์สามารถอ่านได้ โดยไม่ต้องส่งโทเค็นไปที่ใดก็ได้
  • อย่าใส่ข้อมูลที่ละเอียดอ่อน (รหัสผ่าน, PII) ลงในเพย์โหลด JWT — ข้อมูลดังกล่าวมีการเข้ารหัส Base64 ไม่ใช่การเข้ารหัส และใครก็ตามที่ดักจับโทเค็นจะสามารถอ่านการอ้างสิทธิ์ทั้งหมดได้

เครื่องมือที่เกี่ยวข้อง

คำแนะนำที่เกี่ยวข้อง

อ้างอิง