JWT in Authentication process
How JWT works🔍
การยืนยันตัวตนด้วย JWT
สถานการณ์จำลอง นาย A เป็น admin ของระบบร้านค้าเเห่งหนึ่งเเละต้องการที่จะ login เพื่อไปดูข้อมูลการซื้อ-ขายสินค้าในหน้า dashboard ของระบบ
1. นาย A ส่ง authenticated request ไปยัง Server
2. Server ได้ทำการยืนยันว่า นาย A เป็นเจ้าของ account ที่ต้องการ login จริงๆ
3. Server ทำการสร้าง JWT token
4. Server ส่ง JWT กลับไปให้นาย A ผ่าน Client ไปเก็บไว้ใน cookies
5. นาย A กดเข้า dashboard ดังนั้นตัว Client จึงทำการ request เพื่อขอการเข้าถึงข้อมูลใน dashboard พร้อมเเนบ JWT token ติดไปใน http header
6. ทำการตรวจสอบความถูกต้องด้วย signature ของ token เเละเช็คว่านาย A มีสิทธิ์เข้าถึงข้อมูลใน dashboard ไหม
7. เมื่อข้อมูลถูกต้องเรียบร้อย Server ก็จะทำการส่งข้อมูล dashboard กลับไปยัง Client นาย A ก็จะได้รับข้อมูลตามที่ต้องการ
Session-based vs Token-based
ลองมาเปรียบเทียบความเเตกต่างระหว่างการใช้ session id กับ JWT
เเบบ Session
เเบบ JWT token
ความเเตกต่างที่น่าสนใจก็คือ
Session | JWT |
สร้าง session id | สร้าง JWT token |
เก็บ session id ไว้ที่ Database เเละ Client | เก็บ token ไว้เฉพาะที่ Client |
เเล้วมันดีกว่าเเบบ session ยังไง?
ดีกว่าตรงที่มันลดการเก็บข้อมูลนี่เเหละ ลองนึกสภาพเเอพพลิเคชั่นที่มีผู้ใช้งานเป็นเเสนหรือล้านคนดู ถ้าเป็นเเบบ session ก็จะต้องเก็บตัว session id ของผู้ใช้งานทุกคน ซึ่งจะทำให้เกิดภาระฝั่ง Server อย่างมากเพราะต้องมา query หาข้อมูลเพิ่มเติม เเต่ถ้าเป็น JWT จะไม่มีการเก็บ JWT token ไว้ในฝั่ง Server เลย เวลาจะใช้งานก็เเค่ทำการถอดรหัสเเละนำข้อมูลใน payload มาใช้ซึ่งจะทำให้ scale ได้ง่ายอีกด้วย
สรุป
JWT ก็เป็นเหมือนเครื่องมือหนึ่งที่เหล่า developer นำมาใช้ในการทำระบบ login & register ในเว็บเเอพพลิเคชั่นเพื่อที่จะช่วยในเรื่องของการยืนยันตัวตน เก็บข้อมูลผู้ใช้เเละช่วยให้เราสามารถ login เเล้วค้างข้อมูลไว้ในระบบได้ โดยเบื้องต้นก็มีประมาณเท่านี้ครับ หวังว่าเพื่อนๆจะนำไปประยุกต์ใช้กับการเขียนโปรเเกรมได้ ถ้าผิดพลาดประการใดก็ขออภัยด้วย ขอบคุณที่อ่านมาจนถึงตรงนี้ครับ🥰