Skip to main content

Json Web Token

JWT🔒

JWT คืออะไร?

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

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

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c


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

เเน่นอนครับ ขึ้นชื่อว่า jsonJSON กับ token ดังนั้นเเล้วมันก็จะเป็นการใช้เจ้าตัว token เก็บ ข้อมูลประเภท jsonJSON ที่ผ่านการ 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 ได้) เชาง มัสามารถเก็บทั้ง name, username, iat (token ถูกสร้างเมื่อไหร่), exp (token หมดอายุเมื่อไหร่), role ฯลฯ


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

เจ้าตัว signature จะเกิดจากการเอา header (1) กับ payload (2) ที่ encode เเล้ว มารวมกันกับ secret key (3)เเล้วนำไป รวมทั้งต้องบอกhash algorithm (4) ที่จะใช้ด้วย โดยสalgorithm ที่ะบปเเลไวใน signature ก็จะมีอยู่ 4 ส่วนหลักๆครับheader

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

image.png


Playground

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

สรุป

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