Json Web Token
JWT🔒
JWT คืออะไร?
jwt หรือ Json Web Token คือมาตรฐานการเข้ารหัสข้อมูลใน token ด้วย Base64Url Encoded (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 ส่วน ทีนี้เราจะมาลองทำการ decode ดูเเต่ละส่วนกันครับ
1. Header - จะเป็นส่วนที่เก็บ algorithm ของการเข้ารหัสไว้เเละเก็บประเภทของ token
จาก eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
พอ decode จะกลายเป็น
2. Payload - เป็นส่วนที่เก็บข้อมูลของผู้ใช้งาน
จาก eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
พอ decode จะกลายเป็น
โดยมันสามารถเก็บข้อมูลได้มากกว่าที่เห็นในรูปตัวอย่าง มันสามารถเก็บทั้ง name, username, iat (token ถูกสร้างเมื่อไหร่), exp (token หมดอายุเมื่อไหร่), role ฯลฯ
3. Signature - เป็นส่วนสำคัญที่เอาไว้ใช้ในการตรวจสอบความถูกต้องของ token
เจ้าตัว signature จะเกิดจากการเอา header (1) กับ payload (2) ที่ encode เเล้ว มารวมกันกับ secret key (3) รวมทั้งต้องบอก algorithm (4) ที่จะใช้ด้วย โดยสรุปเเล้วใน signature ก็จะมีอยู่ 4 ส่วนหลักๆครับ
มาลองดูวิธีการ gen signature จาก SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Playground
เพื่อนๆสามารถเข้าไปลอง decode & encode เล่นได้ใน official เลยครับ https://jwt.io/
สรุป
JWT คือ วิธีในการใช้ token สำหรับการยืนยันตัวตนเเทนการใช้ session id เพื่อเพิ่ม perfomance ให้กับเว็บไซต์นั่นเองครับ สำหรับหัวข้อต่อไปจะเป็นการพูดถึงการทำงานของเจ้าตัว JWT ในระบบ authentication & authorization เพื่อให้เห็นภาพรวมเเละประโยชน์ของมันนั่นเอง ถ้าพร้อมเเล้ว ไปกันเลย!