
JWT หรือ JSON Web Token เป็นมาตรฐานที่ใช้ในการส่งข้อมูลระหว่างสองฝ่ายในรูปแบบของ JSON ที่สามารถตรวจสอบได้และมีการเข้ารหัสเพื่อความปลอดภัย ในตอนที่แล้ว เราได้พูดถึงพื้นฐานของ JWT และทำไมมันถึงเป็นที่นิยมในวงการพัฒนาแอปพลิเคชัน วันนี้เราจะมาลงลึกกันอีกครั้งเกี่ยวกับวิธีการทำงานของ JWT รวมถึงโครงสร้างและการใช้งานจริงในสถานการณ์ต่าง ๆ ที่พบบ่อยในโลกของ IT
โครงสร้างของ JWT
JWT ประกอบด้วยสามส่วนหลัก คือ Header, Payload และ Signature โดยแต่ละส่วนจะมีการทำงานที่แตกต่างกันออกไป
1. **Header**: ส่วนนี้จะบอกประเภทของ token และอัลกอริธึมที่ใช้ในการเข้ารหัส เช่น HMAC SHA256 หรือ RSA โดยทั่วไปแล้ว Header จะถูกเข้ารหัสเป็น Base64Url เพื่อให้สามารถส่งผ่าน HTTP ได้อย่างปลอดภัย
2. **Payload**: ส่วนนี้คือข้อมูลที่เราต้องการส่งไปยังผู้รับ ข้อมูลใน Payload จะถูกจัดเก็บในรูปแบบของ Key-Value pairs ซึ่งอาจจะมีข้อมูลเกี่ยวกับผู้ใช้งานหรือข้อมูลอื่น ๆ ที่เกี่ยวข้อง เช่น expiration time หรือ role ของผู้ใช้งาน
3. **Signature**: ส่วนนี้จะถูกสร้างขึ้นโดยการนำ Header และ Payload มารวมกัน แล้วทำการเข้ารหัสด้วยอัลกอริธึมที่ระบุใน Header โดยใช้ secret key ซึ่งทำให้สามารถตรวจสอบได้ว่า token นี้ถูกสร้างขึ้นโดยผู้ที่ถือ secret key เท่านั้น
การรวมกันทั้งสามส่วนนี้จะทำให้เกิด JWT ที่มีรูปแบบเป็น string ตัวอย่างเช่น:
`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c`
การทำงานของ JWT ในการยืนยันตัวตน
การใช้งาน JWT ในการยืนยันตัวตน (Authentication) เป็นกระบวนการที่ได้รับความนิยมอย่างมากในระบบที่ต้องการความปลอดภัย โดยเฉพาะในแอปพลิเคชันที่ต้องการให้ผู้ใช้งานเข้าสู่ระบบ
เมื่อผู้ใช้งานทำการล็อกอิน ระบบจะทำการตรวจสอบข้อมูลที่ผู้ใช้งานกรอก เช่น username และ password หากข้อมูลถูกต้อง ระบบจะสร้าง JWT ขึ้นมาและส่งกลับไปยังผู้ใช้งาน โดยทั่วไปแล้ว JWT จะถูกเก็บไว้ใน local storage หรือ session storage ของเบราว์เซอร์
ในทุก ๆ การร้องขอ (request) ที่ผู้ใช้งานต้องการเข้าถึงข้อมูลที่ต้องการการยืนยันตัวตน ระบบจะต้องส่ง JWT ที่ได้มาใน Header ของ HTTP request ไปด้วย เช่น `Authorization: Bearer `
เมื่อเซิร์ฟเวอร์ได้รับ request จะทำการตรวจสอบ JWT ว่ายังไม่หมดอายุและถูกต้องหรือไม่ หากถูกต้อง เซิร์ฟเวอร์จะอนุญาตให้ผู้ใช้งานเข้าถึงข้อมูลที่ร้องขอได้
การจัดการ Token และความปลอดภัย
การจัดการ JWT เป็นสิ่งที่สำคัญมาก เนื่องจากถ้า token ถูกโจมตีหรือถูกขโมยไป ผู้ไม่หวังดีอาจเข้าถึงข้อมูลที่ไม่ควรจะเข้าถึงได้
หนึ่งในวิธีการป้องกันที่สำคัญคือการกำหนดระยะเวลาหมดอายุของ token โดยทั่วไปแล้ว JWT จะมีการตั้งค่า expiration time (exp) เพื่อกำหนดว่า token จะหมดอายุเมื่อไหร่ ซึ่งทำให้ผู้ใช้งานต้องทำการล็อกอินใหม่เมื่อ token หมดอายุ เพื่อเพิ่มความปลอดภัย
นอกจากนี้ การใช้ HTTPS ในการส่งข้อมูลระหว่าง client และ server ก็เป็นสิ่งที่สำคัญเช่นกัน เนื่องจากการส่งข้อมูลผ่าน HTTP อาจถูกโจมตีได้ง่าย การใช้ HTTPS จะช่วยเข้ารหัสข้อมูลที่ส่งไปมา ทำให้ปลอดภัยยิ่งขึ้น
JWT ในการอนุญาต (Authorization)
JWT ยังถูกนำมาใช้ในการอนุญาต (Authorization) เพื่อกำหนดสิทธิ์ในการเข้าถึงข้อมูลต่าง ๆ ในระบบ โดยใน Payload ของ JWT สามารถระบุข้อมูลเกี่ยวกับบทบาทของผู้ใช้งาน เช่น admin, user หรือ guest เป็นต้น
เมื่อผู้ใช้งานส่ง JWT ไปพร้อมกับ request เซิร์ฟเวอร์จะทำการตรวจสอบข้อมูลใน Payload ว่าผู้ใช้งานมีสิทธิ์เข้าถึงข้อมูลที่ร้องขอหรือไม่ เช่น ถ้าผู้ใช้งานเป็น admin ก็สามารถเข้าถึงข้อมูลที่เป็นความลับได้ แต่ถ้าเป็น guest ก็จะไม่สามารถเข้าถึงข้อมูลเหล่านั้นได้
สรุปการทำงานของ JWT
JWT เป็นเครื่องมือที่มีประสิทธิภาพในการจัดการการยืนยันตัวตนและการอนุญาตในระบบ โดยมีโครงสร้างที่เรียบง่ายและมีความปลอดภัยสูง การทำงานของ JWT ประกอบด้วยการส่งข้อมูลระหว่าง client และ server ในรูปแบบที่สามารถตรวจสอบได้ ซึ่งทำให้ระบบสามารถรักษาความปลอดภัยได้ดี
การจัดการ JWT อย่างถูกวิธี เช่น การกำหนดระยะเวลาหมดอายุของ token และการใช้ HTTPS จะช่วยเพิ่มความปลอดภัยให้กับระบบได้มากขึ้น ดังนั้น การเข้าใจการทำงานของ JWT จึงเป็นสิ่งสำคัญสำหรับผู้พัฒนาแอปพลิเคชันในยุคปัจจุบัน
ที่มา: TechExtreme Editorial
#JWT ทำงานยังไง — ลึกซึ้ง ตอน 2 #security #พอดแคสต์ #TechExtreme #พอดแคสต์ #TechExtremePodcast
ขอบคุณที่ติดตามฟัง TechExtreme ในตอนนี้ หวังว่าคุณจะได้ความรู้ใหม่ ๆ เกี่ยวกับ JWT.