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