
ในตอนที่แล้วเราได้พูดถึงพื้นฐานของ JSON Web Token หรือ JWT กันไปแล้ว ซึ่งเป็นมาตรฐานที่ใช้ในการส่งข้อมูลที่มีการตรวจสอบความถูกต้องระหว่างสองฝ่าย ในตอนนี้เราจะมาลงลึกกันอีกสักหน่อย ว่า JWT ทำงานอย่างไร มีส่วนประกอบอะไรบ้าง และจะนำไปใช้งานในระบบต่างๆ ได้อย่างไร
JWT คืออะไร?
JWT หรือ JSON Web Token เป็นรูปแบบการเข้ารหัสข้อมูลที่ใช้สำหรับการส่งข้อมูลระหว่างสองฝ่ายในรูปแบบที่ปลอดภัย โดย JWT จะประกอบไปด้วย 3 ส่วนหลัก ได้แก่ Header, Payload, และ Signature ซึ่งแต่ละส่วนนี้มีหน้าที่และความสำคัญที่แตกต่างกันออกไป
Header คือส่วนที่ใช้บอกประเภทของ token และรูปแบบการเข้ารหัสที่ใช้ ซึ่งโดยทั่วไปแล้ว Header จะถูกเขียนในรูปแบบ JSON เช่น
{
“alg”: “HS256”,
“typ”: “JWT”
}
ในที่นี้ “alg” หมายถึงอัลกอริธึมที่ใช้ในการเข้ารหัส เช่น HMAC SHA256 และ “typ” หมายถึงประเภทของ token ว่าเป็น JWT
Payload คือส่วนที่เก็บข้อมูลจริงที่เราต้องการส่ง ซึ่งอาจเป็นข้อมูลเกี่ยวกับผู้ใช้หรือข้อมูลเกี่ยวกับการเข้าถึงที่จำเป็น โดยข้อมูลใน Payload จะถูกจัดเก็บในรูปแบบ JSON เช่น
{
“sub”: “1234567890”,
“name”: “John Doe”,
“admin”: true
}
ในที่นี้ “sub” หมายถึง Subject หรือผู้ใช้ที่เกี่ยวข้อง “name” คือชื่อผู้ใช้ และ “admin” คือสถานะของผู้ใช้
Signature คือส่วนที่ใช้ในการตรวจสอบความถูกต้องของ token โดยการใช้ Secret Key ร่วมกับ Header และ Payload ในการเข้ารหัส ซึ่งจะทำให้เราสามารถตรวจสอบได้ว่า token ที่ได้รับมานั้นไม่ได้ถูกแก้ไข
การทำงานของ JWT
การทำงานของ JWT เริ่มต้นจากการที่ผู้ใช้ทำการล็อกอินเข้าสู่ระบบ โดยเมื่อผู้ใช้กรอกข้อมูลที่ถูกต้อง ระบบจะทำการสร้าง JWT ขึ้นมาและส่งกลับไปให้ผู้ใช้ โดย JWT จะถูกส่งไปในรูปแบบของ Header ใน HTTP Request หรือใช้ใน Cookies
เมื่อผู้ใช้ส่ง JWT กลับมาที่เซิร์ฟเวอร์ในครั้งถัดไป เซิร์ฟเวอร์จะทำการตรวจสอบ JWT ว่าถูกต้องหรือไม่ โดยตรวจสอบจาก Signature ว่าตรงกับ Secret Key หรือไม่ หากถูกต้องก็จะสามารถเข้าถึงข้อมูลหรือบริการที่ต้องการได้
ตัวอย่างการใช้งาน JWT ในระบบ API คือ เมื่อผู้ใช้ทำการล็อกอินเข้าสู่ระบบ ระบบจะส่ง JWT กลับไปให้ผู้ใช้ ซึ่งผู้ใช้จะต้องนำ JWT นี้ไปแนบในทุกๆ Request ที่ส่งไปยัง API เพื่อให้ API สามารถตรวจสอบได้ว่าผู้ใช้มีสิทธิ์เข้าถึงข้อมูลนั้นๆ
ข้อดีและข้อเสียของ JWT
ข้อดีของ JWT คือ ความสะดวกในการใช้งานและการจัดการ เนื่องจาก JWT เป็น Stateless ซึ่งหมายความว่าเซิร์ฟเวอร์ไม่จำเป็นต้องเก็บข้อมูลเกี่ยวกับผู้ใช้ในเซสชัน ทำให้สามารถขยายระบบได้ง่ายขึ้น นอกจากนี้ยังสามารถใช้ JWT ในการทำงานร่วมกับหลายบริการได้อย่างมีประสิทธิภาพ
ในทางกลับกัน ข้อเสียของ JWT คือ ขนาดของ token ที่อาจมีขนาดใหญ่ขึ้นเมื่อมีข้อมูลมากมายใน Payload นอกจากนี้ หาก Secret Key ถูกเปิดเผยจะทำให้มีความเสี่ยงในการถูกโจมตีได้ง่ายขึ้น เพราะผู้โจมตีสามารถสร้าง JWT ขึ้นมาเองได้
การรักษาความปลอดภัยของ JWT
การรักษาความปลอดภัยของ JWT เป็นสิ่งสำคัญมาก โดยเฉพาะการจัดการ Secret Key ที่ใช้ในการสร้าง Signature ควรเก็บให้ปลอดภัยและไม่ให้มีการเข้าถึงจากผู้ที่ไม่เกี่ยวข้อง นอกจากนี้ยังควรมีการตั้งค่าระยะเวลาหมดอายุของ token เพื่อป้องกันการใช้ token ที่หมดอายุแล้ว
การใช้ HTTPS ในการส่งข้อมูลที่มี JWT สามารถช่วยป้องกันการถูกดักจับข้อมูลได้ โดยการเข้ารหัสข้อมูลที่ส่งไปยังเซิร์ฟเวอร์ทำให้ผู้ไม่หวังดีไม่สามารถเข้าถึงข้อมูลได้
การใช้ JWT ในระบบจริง
การนำ JWT ไปใช้ในระบบจริงนั้นสามารถทำได้หลากหลายวิธี ตัวอย่างเช่น ในระบบ Microservices ที่มีบริการหลายตัวที่ต้องสื่อสารกัน การใช้ JWT เป็นวิธีที่ดีในการจัดการการเข้าถึงข้อมูลระหว่างบริการต่างๆ โดยที่ไม่ต้องมีการเก็บข้อมูลเซสชันในทุกบริการ
นอกจากนี้ JWT ยังสามารถใช้ในการสร้างระบบ Single Sign-On (SSO) ได้ โดยเมื่อผู้ใช้ล็อกอินเข้าสู่ระบบหนึ่ง ระบบจะสร้าง JWT และส่งไปให้ผู้ใช้ ซึ่งผู้ใช้สามารถใช้ JWT นี้ในการเข้าถึงระบบอื่นๆ ที่เชื่อมโยงกันได้ โดยไม่ต้องล็อกอินใหม่อีกครั้ง
ตัวอย่างการใช้งาน JWT ในแอปพลิเคชัน
สมมุติว่าเรามีแอปพลิเคชันที่ผู้ใช้ต้องลงทะเบียนและล็อกอินเพื่อเข้าถึงข้อมูลส่วนบุคคล เมื่อผู้ใช้ทำการล็อกอิน ระบบจะสร้าง JWT ขึ้นมา และส่งกลับไปให้ผู้ใช้ในรูปแบบของ Cookie หรือ Header
เมื่อผู้ใช้ทำการเรียกดูข้อมูลส่วนบุคคล ระบบจะตรวจสอบ JWT ที่ส่งมาว่าถูกต้องหรือไม่ หากถูกต้อง ระบบจะอนุญาตให้เข้าถึงข้อมูลได้ โดยที่ไม่ต้องตรวจสอบข้อมูลผู้ใช้ในฐานข้อมูลทุกครั้ง ซึ่งช่วยลดภาระในการเข้าถึงข้อมูล
สรุป
JWT เป็นเครื่องมือที่มีประสิทธิภาพในการจัดการการเข้าถึงข้อมูลในระบบที่มีการใช้งานหลายๆ บริการ โดยสามารถสร้างและตรวจสอบ token ได้อย่างรวดเร็วและปลอดภัย การทำความเข้าใจในโครงสร้างและการทำงานของ JWT จะช่วยให้เราสามารถนำไปใช้ในระบบของเราได้อย่างมีประสิทธิภาพมากยิ่งขึ้น
การรักษาความปลอดภัยของ JWT เป็นสิ่งที่ไม่ควรมองข้าม ควรมีการจัดการที่ดีเพื่อป้องกันการโจมตีและการเข้าถึงข้อมูลจากผู้ไม่หวังดี หากเราสามารถจัดการกับ JWT ได้อย่างถูกต้อง ก็จะทำให้ระบบของเรามีความปลอดภัยและเชื่อถือได้มากยิ่งขึ้น
ที่มา: TechExtreme Editorial
#JWT ฉบับเล่าฟัง — ลึกซึ้ง ตอน 2 #security #พอดแคสต์ #TechExtreme #พอดแคสต์ #TechExtremePodcast
ขอบคุณที่ติดตามฟังเราจนจบในตอนนี้ หวังว่าคุณจะได้ความรู้ใหม่ๆ เกี่ยวกับ JWT และสามารถนำไปใช้ในงานของคุณได้!