Skip to main content

JWT in Authentication process

How JWT works🔍

Authentication and Authorization process withการยืนยันตัวตนด้วย JWT

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

JWT (8).jpg

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)

JWT (9).jpg

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

เเบบ JWT token

JWT (11).jpg

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

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


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

JWT (12).jpg

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

 

สรุป

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