JWT: JSON Web Token

JSON Web Token หรือ JWT คือมาตรฐานสากล ที่ใช้ในการส่งข้อมูลระหว่างสองฝั่ง ในรูปแบบของวัตถุ JSON โดยมีความปลอดภัยสูง เพราะข้อมูลที่ส่งไปนั้นสามารถตรวจสอบได้ว่าถูกแก้ไขหรือไม่ผ่านการลงลายมือชื่อดิจิทัล


ส่วนประกอบของ JWT

JWT หนึ่งชุดจะประกอบด้วยข้อความ 3 ส่วนที่คั่นด้วยเครื่องหมายจุด (.) คือ Header.Payload.Signature


Header

บอกประเภทของ Token และอัลกอริทึมที่ใช้ในการเข้ารหัส เช่น HMAC SHA256 หรือ RSA

{ "alg": "HS256", "typ": "JWT"
}

Payload

คือข้อมูลที่เราต้องการส่ง เช่น ID ของผู้ใช้, ชื่อ หรือวันหมดอายุของ Token ข้อมูลส่วนนี้ไม่ได้ถูกเข้ารหัสลับ แต่ถูกแปลงเป็น Base64 ดังนั้นห้ามใส่รหัสผ่านหรือข้อมูลที่สำคัญมากไว้ในนี้

{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022
}

Signature

ส่วนนี้สำคัญที่สุด ใช้ป้องกันการแก้ไขข้อมูล โดยการนำ Header และ Payload ที่เป็น Base64 มาบวกรวมกับ Secret Key แล้วนำไปผ่านฟังก์ชัน Hash ตามอัลกอริทึมที่ระบุไว้ใน Header


JWT ทำงานอย่างไร ?

  1. Authentication
    ผู้ใช้ล็อกอินด้วย Username / Password
  2. Creation
    หากรหัสถูกต้อง Server จะสร้าง JWT โดยใช้ Secret Key และส่งกลับไปให้ Client
  3. Storage
    Client เก็บ JWT ไว้
  4. Authorization
    เมื่อ Client ต้องการดึงข้อมูลจาก API จะส่ง JWT ไปใน Header ของ HTTP Request:
    Authorization: Bearer <token>
  5. Validation
    Server ตรวจสอบ Signature ของ Token ถ้าถูกต้องและยังไม่หมดอายุ Server จะอนุญาตให้เข้าถึงข้อมูล

ข้อดีและข้อเสีย

ข้อดี

  • Stateless
    Server ไม่ต้องเก็บข้อมูล Session ไว้ในหน่วยความจำ เพราะข้อมูลทุกอย่างอยู่ใน Token แล้ว เหมาะมากสำหรับระบบที่ต้องขยายตัว
  • Cross-Domain
    ใช้งานได้ง่ายกับหลายโดเมน หรือระบบ Microservices
  • Performance
    ลดการ Query ฐานข้อมูลเพื่อเช็คสถานะการล็อกอินบ่อย ๆ

ข้อเสีย

  • Revocation
    การยกเลิก Token ก่อนหมดอายุทำได้ยาก เนื่องจาก Server ไม่ได้เก็บสถานะไว้
  • Data Size
    ยิ่งใส่ Payload เยอะ ขนาด Token จะยิ่งใหญ่ ทำให้เปลือง Bandwidth
  • Security Risk
    หาก Secret Key รั่วไหล ผู้โจมตีจะสามารถสร้าง Token ปลอมได้ทันที

ข้อควรระวังในการใช้งาน

  • HTTPS เท่านั้น
    ต้องส่งผ่าน HTTPS เสมอเพื่อป้องกันการถูกดักจับ
  • อย่าเก็บความลับใน Payload
    อย่างที่กล่าวไป Payload แค่ถูกแปลงรหัส ไม่ได้ถูกปกปิด ใครก็ถอดรหัสออกมาดูได้
  • ตั้งวันหมดอายุ
    ควรกำหนด exp ให้เหมาะสม ไม่ควรยาวเกินไป เพื่อลดความเสี่ยงหาก Token หลุดรอดไป

รุปสั้น ๆ JWT คือ “บัตรผ่าน” ที่บอกว่าคุณเป็นใคร มีสิทธิ์ทำอะไร โดยที่ Server ไม่ต้องคอยจำหน้าคุณทุกครั้ง แค่ตรวจเช็ค “ตราประทับ” บนบัตรก็เพียงพอแล้วครับ


อ่านเพิ่มเติม

Leave a Reply

Exit mobile version