Skip to main content

JWT in Authentication process

How JWT works🔍

การยืนยันตัวตนด้วย JWT

สถานการณ์จำลอง นาย A เป็น admin ของระบบร้านค้าเเห่งหนึ่งเเละต้องการที่จะ login เพื่อไปดูข้อมูลการซื้อ-ขายสินค้าในหน้า dashboard ของระบบ

JWT (8).jpg

1. นาย A ส่ง authenticated request ไปยัง Server

2. Server ได้ทำการยืนยันว่า นาย A เป็นเจ้าของ account ที่ต้องการ login จริง ๆ

3. Server ทำการสร้าง JWT token

4. Server ส่ง JWT กลับไปให้นาย A ผ่าน Client ไปเก็บไว้ใน cookies

JWT (9).jpg

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 (10).jpg

เเบบ JWT token

JWT (11).jpg

ความเเตกต่างที่น่าสนใจก็คือ

Session JWT
สร้าง session id สร้าง JWT token
เก็บ session id ไว้ที่ Database เเละ Client เก็บ token ไว้เฉพาะที่ Client


เเล้วมันดีกว่าเเบบ session ยังไง?

JWT (12).jpg

ดีกว่าตรงที่มันลดการเก็บข้อมูลนี่เเหละ ลองนึกสภาพเเอพพลิเคชั่นที่มีผู้ใช้งานเป็นเเสนหรือล้านคนดู ถ้าเป็นเเบบ session ก็จะต้องเก็บตัว session id ของผู้ใช้งานทุกคน ซึ่งจะทำให้เกิดภาระฝั่ง Server อย่างมากเพราะต้องมา query หาข้อมูลเพิ่มเติม เเต่ถ้าเป็น JWT จะไม่มีการเก็บ JWT token ไว้ในฝั่ง Server เลย เวลาจะใช้งานก็เเค่ทำการถอดรหัสเเละนำข้อมูลใน payload มาใช้ซึ่งจะทำให้ scale ได้ง่ายอีกด้วย


สรุป

JWT ก็เป็นเหมือนเครื่องมือหนึ่งที่เหล่า developer นำมาใช้ในการทำระบบ login & register ในเว็บเเอพพลิเคชั่นเพื่อที่จะช่วยในเรื่องของการยืนยันตัวตน เก็บข้อมูลผู้ใช้เเละช่วยให้เราสามารถ login เเล้วค้างข้อมูลไว้ในระบบได้ โดยเบื้องต้นก็มีประมาณเท่านี้ครับ หวังว่าเพื่อน ๆ จะนำไปประยุกต์ใช้กับการเขียนโปรเเกรมได้ ถ้าผิดพลาดประการใดก็ขออภัยด้วย ขอบคุณที่อ่านมาจนถึงตรงนี้ครับ🥰

 

เเหล่งอ้างอิง

เเผนภาพทั้งหมดในบทความ