JWT VS PASETO
-
บทนำ "สวัสดีครับทุกคน วันนี้ผมจะมาแชร์ความแตกต่างระหว่าง JWT (JSON Web Token) ที่เราคุ้นเคยกันดี กับ PASETO (Platform-Agnostic Security Tokens) ซึ่งเป็นตัวเลือกที่ใหม่กว่าและกำลังถูกพูดถึงในเรื่องความปลอดภัยครับ ถ้าเปรียบเทียบง่ายๆ JWT คือกล่องเครื่องมืออเนกประสงค์ ที่ทำได้ทุกอย่างแต่ต้องใช้ให้เป็น ไม่งั้นจะอันตราย ส่วน PASETO คือชุดเครื่องมือสำเร็จรูป ที่ออกแบบมาให้ปลอดภัยตั้งแต่ออกจากโรงงานครับ"
-
ปัญหาของ JWT "ทำไมต้องมี PASETO? เพราะ JWT มีช่องโหว่จากการออกแบบที่ยืดหยุ่นเกินไป: Algorithm Confusion: ใน Header ของ JWT จะบอกว่าใช้ Algorithm อะไร (เช่น RS256 หรือ HS256) ซึ่ง Hacker สามารถแก้ Header เป็น alg: none เพื่อข้ามการตรวจสอบ Signature หรือหลอกให้ Server ใช้ Key ผิดประเภทได้ No Encryption by Default: ปกติ JWT แค่ Encode ข้อมูล (Base64) แต่ไม่ได้เข้ารหัส ใครได้ Token ไปก็เปิดดูข้อมูลข้างในได้ทันที (ถ้าไม่ใช้ JWE เพิ่มเติมซึ่งคอนฟิกยาก)"
-
PASETO คือทางออก "PASETO แก้ปัญหาเหล่านี้ด้วยหลักการ 'Secure by Default': No Agnostic Header: PASETO ไม่ให้เราเลือก Algorithm ตามใจชอบ แต่มัดรวมมาให้เป็น Versions (เช่น v2, v4) ซึ่งแต่ละ Version จะใช้ Algorithm ที่ผ่านการยอมรับว่าปลอดภัยที่สุดในขณะนั้นเท่านั้น ตัดปัญหาเรื่อง 'Algorithm Confusion' ไปได้เลย Two Modes: Public: เหมือน JWT ทั่วไป คือใช้ Sign เพื่อยืนยันความถูกต้อง Local: คือการ Encrypted ข้อมูลข้างในด้วย Symmetric Key ทำให้คนอื่นอ่านข้อมูลใน Token ไม่ได้เลยแม้แต่ตัวเดียว"
-
บทสรุปและคำแนะนำ "แล้วเราควรเลือกใช้อะไร? Use JWT: ถ้าคุณต้องทำระบบที่เชื่อมต่อกับมาตรฐานสากลอย่าง OAuth2 หรือ OpenID Connect (OIDC) เพราะ Ecosystem และ Library รองรับกว้างขวางที่สุด Use PASETO: ถ้าคุณกำลังสร้าง Internal Microservices หรือ Modern Web App ใหม่ และต้องการความมั่นใจว่า Token จะไม่หลุดประเด็น Security พื้นฐาน
สรุปคือ ถ้าเน้นความง่ายและความปลอดภัยสูงโดยไม่ต้องคอนฟิกเยอะ PASETO คืออนาคต"







