ไม่มีการอัปโหลด, 100% ในเครื่อง, ไม่มีบัญชี

วิธีทำ

วิธีถอดรหัส JWT โดยไม่ทำให้รั่วไหล

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

ทีละขั้นตอน

  1. เปิดตัวถอดรหัส JWT แล้ววางโทเคนของคุณลงในช่องป้อนข้อมูล JWT คือก้อน Base64Url สามก้อนที่เชื่อมกันด้วยจุด ได้แก่ ส่วนหัว เพย์โหลด และลายเซ็น คุณจะวางพร้อมคำนำหน้า Bearer หรือไม่ก็ได้ เครื่องมือจะอ่านโครงสร้างได้ทั้งสองแบบ และบอกคุณทันทีหากรูปแบบผิด
  2. อ่านส่วนหัวและเพย์โหลดที่ถอดรหัสแล้ว ส่วนหัวจะแสดงอัลกอริทึมการลงนาม (เช่น HS256 หรือ RS256) และคีย์ ID เมื่อมี เพย์โหลดจะแสดงเคลมต่าง ๆ ได้แก่ โทเคนนี้ออกให้ใคร (sub) ใครเป็นผู้ออก (iss) และเวลาประทับต่าง ๆ เครื่องมือจะแปลงฟิลด์ตัวเลข iat, nbf และ exp ให้เป็นวันที่ที่อ่านได้ และระบุว่าโทเคนยังใช้ได้อยู่หรือหมดอายุไปแล้ว
    JWT ที่ถอดรหัสแล้วแสดงอัลกอริทึมในส่วนหัวและเคลมในเพย์โหลดพร้อมวันที่ออกและวันหมดอายุที่อ่านได้
  3. หากโทเคนใช้ HS256 และคุณถือซีเคร็ตที่ใช้ร่วมกัน ให้วางซีเคร็ตลงในช่องยืนยันแล้วคลิก Verify เครื่องมือจะคำนวณ HMAC ใหม่บนส่วนหัวและเพย์โหลด แล้วเทียบกับลายเซ็น คุณจึงรู้ได้ว่าโทเคนเป็นของแท้หรือถูกแก้ไข สำหรับโทเคน RS256 หรือ ES256 การลงนามใช้คีย์ส่วนตัวที่คุณไม่มี เครื่องมือจึงตรวจดูเคลมแต่จะไม่อ้างว่ายืนยันลายเซ็นได้
    ช่องยืนยัน HMAC ที่กรอกด้วยซีเคร็ตที่ใช้ร่วมกัน พร้อมป้ายลายเซ็นที่ใช้ได้สำหรับโทเคน HS256

ทำไมคุณจึงไม่ควรวางโทเคนลงในเว็บสุ่มเด็ดขาด

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

ลายเซ็นบอกอะไรคุณได้และบอกไม่ได้

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

โครงสร้าง JWT และสิ่งที่แต่ละส่วนเปิดเผย

JWT คือสามส่วนที่เข้ารหัส Base64url คั่นด้วยจุด: header, payload และ signature ส่วน header ประกาศชนิด token ("JWT") และอัลกอริทึม: HS256 (HMAC-SHA-256, shared secret) หรือ RS256 (RSA-SHA-256, public/private key pair) เป็นที่นิยมที่สุด ส่วน payload บรรจุ claim เช่น `sub` (subject, มักเป็น user ID), `iat` (issued-at Unix timestamp), `exp` (expiration Unix timestamp), `aud` (intended audience) และ application claim แบบกำหนดเองเช่น roles หรือ scope Base64url ไม่ใช่การเข้ารหัส: มันเป็น URL-safe variant ของ Base64 ที่แทนที่ `+` ด้วย `-` และ `/` ด้วย `_` และละเว้น padding ใครก็ตามที่มี token string ดิบสามารถถอดรหัส header และ payload โดยไม่ต้องใช้ signing key เฉพาะส่วน signature เท่านั้นที่ต้องใช้ key เพื่อตรวจสอบ นี่คือเหตุผลที่การวาง production token จริงลงใน external online decoder เป็นความเสี่ยงด้านความปลอดภัย: หาก `exp` ของ token ยังอยู่ในอนาคตและบริการบันทึก input ไว้ session ที่มันแทนอาจถูกบุกรุก

เครื่องมือที่ใช้ในคู่มือนี้

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

โทเคนของฉันถูกส่งไปยังเซิร์ฟเวอร์ใด ๆ ตอนที่ฉันถอดรหัสมันหรือไม่

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

เครื่องมือนี้ยืนยันลายเซ็น RS256 หรือ ES256 ได้หรือไม่

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

แหล่งข้อมูล