เมื่อเกิดเหตุขัดข้อง ระบบต้องลดผลกระทบและกู้คืนจากข้อมูลสำรองที่ทดสอบแล้ว จึงถามว่า เว็บแอปพลิเคชันใช้ JWT สำหรับการยืนยันตัวตน แต่ต้องการยกเลิก Token ก่อนหมดอายุเมื่อผู้ใช้ล็อกเอาต์ ปัญหาหลักของ JWT ในกรณีนี้คืออะไร และวิธีแก้ไขที่เหมาะสมที่สุดคืออะไร
กJWT ไม่รองรับการเข้ารหัสข้อมูล จึงทำให้ยกเลิก Token ไม่ได้ วิธีแก้ที่เหมาะสมคือเปลี่ยนไปใช้ HTTPS เพื่อเข้ารหัสการรับส่งข้อมูลแทนการใช้ JWT
ขJWT เป็น Stateless จึงไม่มีกลไกยกเลิก Token โดยตรง วิธีแก้ที่เหมาะสมคือใช้ Token Blacklist โดยเก็บ Token ที่ถูกยกเลิกไว้ใน Redis หรือฐานข้อมูล และตรวจสอบทุกครั้งที่มีคำขอ
คJWT มีขนาดใหญ่เกินไปทำให้เซิร์ฟเวอร์ประมวลผลช้า วิธีแก้ที่เหมาะสมคือบีบอัด Payload ของ JWT และเพิ่มหน่วยความจำเซิร์ฟเวอร์เพื่อรองรับการประมวลผล
งJWT ไม่รองรับการกำหนดเวลาหมดอายุ ทำให้ยกเลิก Token ก่อนกำหนดไม่ได้ วิธีแก้ที่เหมาะสมคือเพิ่ม Field หมดอายุแบบกำหนดเองใน Header แทน Field exp มาตรฐาน
เฉลยอธิบาย
JWT เป็น Stateless Authentication คือเซิร์ฟเวอร์ไม่เก็บสถานะของ Token ไว้ ทำให้ไม่สามารถยกเลิก Token ที่ออกไปแล้วได้โดยตรง ต่างจาก Session-based ที่เซิร์ฟเวอร์สามารถลบ Session ได้ทันที วิธีแก้ที่นิยมและเหมาะสมที่สุดคือการทำ Token Blacklist โดยเก็บ Token หรือ JTI (JWT ID) ที่ถูกยกเลิกลงใน In-memory Store เช่น Redis และตรวจสอบทุกครั้งที่รับคำขอ ซึ่งยังคงประสิทธิภาพสูงและแก้ปัญหาได้ตรงจุด