Header (JSON)
{}
วาง JWT เพื่อ decode และดู Header/Payload ในรูปแบบ JSON ที่อ่านง่าย
เครื่องมือนี้ decode ฝั่งเบราว์เซอร์เท่านั้น และไม่ได้ตรวจสอบลายเซ็น (signature)
{}
{}
JWT (JSON Web Token) คือ token มาตรฐานที่ใช้ส่ง claims ระหว่าง parties อย่างปลอดภัย นิยมใช้ในระบบ Authentication และ Authorization ของ Web API เมื่อผู้ใช้ login สำเร็จ server จะออก JWT ให้ client เก็บไว้ และส่งกลับในทุก request เพื่อยืนยันตัวตน server จะตรวจสอบ signature ของ JWT เพื่อยืนยันว่า token ไม่ถูกแก้ไข
JWT แบบ JWS (ที่ใช้ทั่วไป) ไม่ได้ encrypt เนื้อหา แต่ใช้ digital signature ตรวจสอบความถูกต้องเท่านั้น ซึ่งหมายความว่าใครก็สามารถ decode payload ออกมาได้ เพียงแค่ Base64 decode ดังนั้นห้ามเก็บข้อมูลความลับเช่น รหัสผ่านหรือ credit card ใน JWT ถ้าต้องการปกปิดเนื้อหาด้วย ต้องใช้ JWE (JSON Web Encryption) แทน
JWT ประกอบด้วย 3 ส่วนคั่นด้วย "." ได้แก่ Header (ระบุ algorithm เช่น HS256, RS256), Payload (ข้อมูล claims เช่น user ID, role, expiry time) และ Signature (ลายเซ็น digital ที่สร้างจาก header + payload + secret key) เฉพาะ Signature เท่านั้นที่ต้องการ secret key ในการตรวจสอบ ส่วน Header และ Payload เป็นแค่ Base64URL encoded
Session cookie เก็บ session ID ที่ฝั่ง server (stateful) server ต้องเก็บ session ไว้ใน database หรือ memory ส่วน JWT เป็น stateless คือ server ไม่ต้องเก็บ token เพราะข้อมูลทั้งหมดอยู่ใน token นั้นเอง JWT เหมาะกับระบบ microservices, mobile API และ cross-domain authentication แต่มีข้อเสียคือ revoke ยาก ส่วน session cookie เหมาะกับเว็บแบบดั้งเดิมที่ต้องการ logout ทันที