Skip to main content

Json Web Token

JWT🔒

JWT คืออะไร?

JWT หรือ Json Web Token คือมาตรฐานการเข้ารหัสข้อมูลใน token (RFC 7519) ที่เหมาะสำหรับการใช้ยืนยันตัวตนในเว็บเเอพพลิเคชั่นที่มีผู้ใช้จำนวนมาก อธิบายง่าย ๆ มันก็คือ token ที่เอาไว้ใช้ยืนยันตัวตนเวลาจะทำกิจกรรมบางอย่างบนเว็บไซต์นั่นเอง

ตัวอย่างของ Token ที่ทำการ encode เเล้ว

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c


เเล้ว JWT มันเอาไว้ใช้ทำอะไร?

เเน่นอนครับ ขึ้นชื่อว่า JSON กับ token ดังนั้นเเล้วมันก็จะเป็นการใช้เจ้าตัว token เก็บ ข้อมูลประเภท JSON ที่ผ่านการ encode เเล้ว ไปใช้ยืนยันตัวตนของผู้ใช้งาน

ข้างใน JWT เก็บอะไรไว้บ้าง?

เเต่ก่อนจะรู้ว่ามีอะไรบ้าง เราต้องรู้ก่อนว่ามันเเบ่งยังไง เจ้าตัว JWT มันเป็น string token ยาว ๆ ใช่ไหมครับเเต่มันจะมี .เอาไว้ใช้ในการเเบ่งส่วน

นี่คือตัวอย่างของ token ที่เเบ่งเป็น 3 ส่วนด้วย .

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

จากตัวอย่าง ข้างใน JWT จะมีหลัก ๆ อยู่ 3 ส่วน

JWT (7).jpg

ทีนี้เราจะมาลองทำการ decode ดูเเต่ละส่วนกันครับ

1. Header - จะเป็นส่วนที่เก็บ algorithm ของการเข้ารหัสไว้เเละเก็บประเภทของ token

จาก eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 พอ decode จะกลายเป็น 

image.png


2. Payload - เป็นส่วนที่เก็บข้อมูลของผู้ใช้งาน

จาก eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ พอ decode จะกลายเป็น

image.png

โดยมันสามารถเก็บข้อมูลได้ทุกอย่างตามเเต่ developer จะต้องการ (เเต่ต้องเก็บในรูป JSON ได้) เช่น username, iat (token ถูกสร้างเมื่อไหร่), exp (token หมดอายุเมื่อไหร่), role


3. Signature - เป็นส่วนสำคัญที่เอาไว้ใช้ในการตรวจสอบความถูกต้องของ token

เจ้าตัว signature จะเกิดจากการเอา header กับ payload ที่ encode เเล้ว มารวมกันกับ secret key เเล้วนำไป hash ด้วย algorithm ที่ระบุไว้ใน header

มาลองดูวิธีการ gen signature จาก SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c 

image.png


Playground

เพื่อน ๆ สามารถเข้าไปลอง decode & encode เล่นได้ใน official เลยครับ https://jwt.io/

สรุป

JWT คือ รูปเเบบการใช้ token สำหรับการยืนยันตัวตนเเทนการใช้ session id เพื่อเพิ่ม perfomance ให้กับเว็บไซต์นั่นเองครับ สำหรับหัวข้อต่อไปจะเป็นการพูดถึงการทำงานของเจ้าตัว JWT ในระบบ authentication & authorization เพื่อให้เห็นภาพรวมเเละประโยชน์ของมันมากยิ่งขึ้น