@ratanon
1 year ago - 2023-11-08 04:51:28
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/