โครงสร้างและการทำงานของ JSON Web Token (JWT)
JSON Web Token หรือ JWT คือมาตรฐานสำหรับการส่งผ่านข้อมูลระหว่างระบบอย่างปลอดภัยในรูปแบบของวัตถุ JSON โครงสร้างของ JWT ประกอบด้วยสามส่วนหลักที่เชื่อมต่อกันด้วยเครื่องหมายจุด (.) ได้แก่ ส่วนหัว (Header) ส่วนข้อมูล (Payload) และลายเซ็น (Signature)
การเข้ารหัสข้อมูลใน JWT จะใช้รูปแบบ Base64URL เพื่อให้สามารถส่งโทเค็นผ่าน URL หรือโปรโตคอล HTTP ได้อย่างสะดวก เมื่อนำโทเค็นมาใช้งาน เครื่องมือถอดรหัส JWT จะทำการแยกส่วนประกอบทั้งสามนี้ออกจากกัน และแปลงรหัส Base64URL กลับมาเป็นข้อความ JSON ที่มนุษย์สามารถอ่านเข้าใจได้
ส่วนหัวและส่วนข้อมูลของ JWT
ส่วนหัว (Header) ทำหน้าที่ระบุข้อมูลพื้นฐานเกี่ยวกับตัวโทเค็นเอง โดยทั่วไปจะประกอบด้วยข้อมูลระบุอัลกอริทึมที่ใช้ในการเข้ารหัสลายเซ็น เช่น alg และประเภทของโทเค็น เช่น typ
ส่วนข้อมูล (Payload) หรือที่เรียกว่า Claims เป็นส่วนที่บรรจุข้อมูลที่ต้องการส่งผ่านจริง ข้อมูลเหล่านี้อาจเป็นข้อมูลของผู้ใช้งานหรือสิทธิ์การเข้าถึงต่างๆ โดยมี Claims มาตรฐานที่มักถูกใช้งานบ่อยครั้ง เช่น:
iat(Issued At): ระบุเวลาที่โทเค็นนี้ถูกสร้างขึ้นexp(Expiration Time): ระบุเวลาที่โทเค็นนี้จะหมดอายุการใช้งาน
ข้อจำกัดและกฎการตรวจสอบความถูกต้องของโทเค็น
เครื่องมือถอดรหัส JWT นี้มีกฎเกณฑ์ในการตรวจสอบความถูกต้องของรูปแบบข้อมูลที่ป้อนเข้ามาอย่างชัดเจน หากข้อมูลไม่เป็นไปตามมาตรฐาน ระบบจะแสดงข้อความแจ้งเตือนข้อผิดพลาดตามกรณีต่างๆ ดังนี้:
- หากช่องข้อมูลว่างเปล่า ระบบจะแสดงสถานะ "พร้อมใช้งาน วาง JWT เพื่อถอดรหัส"
- หากข้อมูลที่ป้อนไม่มีส่วนประกอบสามส่วนที่คั่นด้วยจุด ระบบจะแสดงข้อความ "ไม่ใช่ JWT ที่ถูกต้อง — คาดหวังรูปแบบที่มีสามส่วนคั่นด้วยจุด"
- หากไม่สามารถถอดรหัสส่วนหัวได้เนื่องจากรูปแบบ Base64URL ไม่ถูกต้อง จะแสดงข้อความ "ไม่สามารถถอดรหัสส่วนหัวได้ — Base64URL ไม่ถูกต้อง"
- หากไม่สามารถถอดรหัสส่วนข้อมูลได้เนื่องจากรูปแบบ Base64URL ไม่ถูกต้อง จะแสดงข้อความ "ไม่สามารถถอดรหัสส่วนข้อมูลได้ — Base64URL ไม่ถูกต้อง"
- หากส่วนหัวที่ถอดรหัสออกมาแล้วไม่ได้อยู่ในรูปแบบ JSON ที่ถูกต้อง จะแสดงข้อความ "ส่วนหัวไม่ใช่ JSON ที่ถูกต้อง"
- หากส่วนข้อมูลที่ถอดรหัสออกมาแล้วไม่ได้อยู่ในรูปแบบ JSON ที่ถูกต้อง จะแสดงข้อความ "ส่วนข้อมูลไม่ใช่ JSON ที่ถูกต้อง"
- หากข้อมูลที่ป้อนมีความยาวมากเกินไป จะแสดงข้อความ "ข้อมูลยาวเกินกว่าจะเป็น JWT จริง"
เมื่อเกิดข้อผิดพลาดเหล่านี้ขึ้น พื้นที่แสดงผลข้อมูลที่ถอดรหัสแล้วจะถูกซ่อนไว้โดยอัตโนมัติ และเมื่อผู้ใช้งานกดปุ่ม "ล้างข้อมูล" เพื่อล้างค่าในช่องป้อนข้อมูล ระบบจะคืนการโฟกัสกลับไปที่ช่องป้อนข้อมูลทันที
ความแตกต่างระหว่างการถอดรหัสและการตรวจสอบความถูกต้อง
การถอดรหัส (Decoding) เป็นเพียงการแปลงข้อมูลจากรูปแบบ Base64URL กลับมาเป็นข้อความ JSON เพื่อให้อ่านข้อมูลด้านในได้เท่านั้น กระบวนการนี้ไม่ได้เป็นการตรวจสอบว่าข้อมูลในโทเค็นถูกแก้ไขระหว่างทางหรือไม่
ในทางตรงกันข้าม การตรวจสอบความถูกต้อง (Verification) จะต้องใช้รหัสลับ (signing secret) หรือคีย์สาธารณะ (public key) เพื่อตรวจสอบความถูกต้องของลายเซ็น (Signature) ว่าตรงกับส่วนหัวและส่วนข้อมูลจริงหรือไม่ การใช้งานโทเค็นโดยไม่มีการตรวจสอบลายเซ็นในระบบจริงอาจก่อให้เกิดช่องโหว่ด้านความปลอดภัยร้ายแรง เนื่องจากผู้ใช้งานสามารถแก้ไขข้อมูลใน Payload เองได้ เครื่องมือนี้ทำหน้าที่ถอดรหัสเพื่อแสดงผลเท่านั้น โดยไม่ได้ถามหารหัสลับหรือคีย์สาธารณะ และไม่มีการตรวจสอบลายเซ็นแต่อย่างใด
ความเป็นส่วนตัวและการประมวลผลข้อมูล
ความปลอดภัยของข้อมูลเป็นสิ่งสำคัญ โทเค็นของคุณจะถูกถอดรหัสในเบราว์เซอร์ของคุณ ไม่มีการอัปโหลดข้อมูลใดๆ ไปยัง BroBroGo กระบวนการทำงานทั้งหมดเกิดขึ้นภายในเครื่องคอมพิวเตอร์หรืออุปกรณ์ของผู้ใช้งานโดยตรง ทำให้มั่นใจได้ว่าข้อมูลความลับที่อยู่ในโทเค็นจะไม่ถูกส่งผ่านเครือข่ายอินเทอร์เน็ตไปยังเซิร์ฟเวอร์ภายนอก
คำถามที่พบบ่อย (FAQ)
ถาม: การวาง JWT ของฉันที่นี่ปลอดภัยหรือไม่?
ตอบ: ปลอดภัยครับ การถอดรหัสเกิดขึ้นในเบราว์เซอร์ของคุณทั้งหมด โดยไม่มีการส่งโทเค็นของคุณไปยัง BroBroGo
ถาม: เครื่องมือนี้ตรวจสอบความถูกต้องของลายเซ็น (signature) หรือไม่?
ตอบ: ไม่ครับ เครื่องมือนี้ทำหน้าที่เพียงถอดรหัสส่วนหัว (header) และส่วนข้อมูล (payload) เพื่อให้คุณอ่านได้เท่านั้น การตรวจสอบลายเซ็นจำเป็นต้องใช้รหัสลับ (signing secret) หรือคีย์สาธารณะ (public key) ซึ่งเครื่องมือนี้จะไม่ถามข้อมูลดังกล่าวจากคุณ
ถาม: ฉันจะทราบได้อย่างไรว่าโทเค็นของฉันหมดอายุแล้ว?
ตอบ: ตัวถอดรหัสจะอ่านค่า exp claim และแสดงป้ายสถานะ — ใช้งานได้, หมดอายุแล้ว, ยังไม่มีผลบังคับใช้ หรือไม่มีวันหมดอายุ — ถัดจากโทเค็นที่ถอดรหัสแล้ว