JSON Web Token (JWT)

การยืนยันด้วย JSON Web Token (JWT) เป็นวิธีการยืนยันที่เป็นที่นิยมในการพัฒนาเว็บแอปพลิเคชันและ API เพราะมันเป็นวิธีที่ปลอดภัยและง่ายต่อการข้ามข้อมูลระหว่างไคลเอ็นต์และเซิร์ฟเวอร์. JWT เป็นโทเค็นที่เข้ารหัสและปลอดภัยซึ่งเก็บข้อมูลผู้ใช้ (claims) ภายใน JSON object และสามารถใช้เพื่อยืนยันตัวตนและข้อมูลสิทธิ์การเข้าถึง (authorization)

วิธีการทำงานของ JWT ในกระบวนการยืนยันคือ

1.การล็อกอิน (Authentication):

  • ผู้ใช้ป้อนข้อมูลล็อกอิน (เช่น ชื่อผู้ใช้และรหัสผ่าน)
  • เซิร์ฟเวอร์ตรวจสอบข้อมูลและถ้าถูกต้อง, เซิร์ฟเวอร์จะสร้าง JWT ที่มีข้อมูลของผู้ใช้ (claims) เช่น userID, ชื่อผู้ใช้, สิทธิ์การเข้าถึง, และอื่นๆ
  • JWT นี้จะถูกเข้ารหัสและลงนามด้วยความลับ (secret) หรือคู่กุญแจสาธารณะ/ส่วนตัว (public/private key pair)

2.การส่งโทเค็น (Token Transmission):

  • JWT ที่เกิดขึ้นจะส่งกลับไปยังไคลเอ็นต์
  • ไคลเอ็นต์จะเก็บ JWT ไว้ (โดยปกติใน local storage, session storage, หรือใน cookie)

3.การยืนยันตัวตนและการเข้าถึง (Authentication and Authorization):

  • ในคำขอต่อไปที่ไคลเอ็นต์ทำไปยังเซิร์ฟเวอร์, JWT จะถูกส่งไปใน header ของคำขอ, โดยทั่วไปใช้ Authorization header กับ Bearer schema
  • เซิร์ฟเวอร์จะตรวจสอบ JWT ว่าถูกต้องและยังไม่หมดอายุโดยการตรวจสอบลายเซ็นดิจิทัล
  • ถ้า JWT ถูกต้อง, เซิร์ฟเวอร์จะดำเนินการตามคำขอด้วยสิทธิ์ที่กำหนดใน JWT, ทำให้ไคลเอ็นต์สามารถเข้าถึงทรัพยากรที่อนุญาต


JWT ประกอบด้วยสามส่วน: Header, Payload, และ Signature ตัวอย่างของโครงสร้าง JWT:

xxxxx.yyyyy.zzzzz 
  • Header: ประกอบด้วยข้อมูลเกี่ยวกับวิธีการเข้ารหัสของ JWT (เช่น, ประเภทของโทเค็น, ซึ่งโดยทั่วไปจะเป็น JWT, และอัลกอริธึมที่ใช้ลงนาม, เช่น HS256 หรือ RS256)
  • Payload: มี claims ซึ่งเป็นข้อมูลที่ JWT ถูกใช้เพื่อแสดง (เช่น, ข้อมูลผู้ใช้)
  • Signature: เป็นส่วนที่เซิร์ฟเวอร์ใช้เพื่อตรวจสอบว่า JWT ไม่ถูกปลอมแปลงตั้งแต่ถูกสร้าง


อ่านเพิ่มเติมได้จาก https://research.securitum.com/jwt-json-web-token-security/

0
166