JSON Web Tokens (JWTs) เป็นวิธีการแสดง claims ที่กะทัดรัดและปลอดภัยสำหรับ URL เพื่อถ่ายโอนระหว่างสองฝ่าย โดยทั่วไปแล้ว claims เหล่านี้จะใช้เพื่อรับรองความถูกต้องและความถูกต้องของข้อมูล
บทความนี้จะสำรวจวิธีการทำงานของ JWTs เราจะดูโครงสร้างของ JWT ซึ่งประกอบด้วยสามส่วนที่เข้ารหัสและลงนามแบบดิจิทัล จากนั้นเราจะพูดคุยถึงกรณีการใช้งานทั่วไปสำหรับ JWTs และตรวจสอบประโยชน์บางประการของการใช้งาน
โครงสร้างของ JWT (พร้อมตัวอย่าง)
JSON Web Token (JWT) ประกอบด้วยสามส่วนที่คั่นด้วยจุด: Header, Payload และ Signature โครงสร้างโดยรวมคือ:
xxxxxxxxxx.yyyyyyyyyy.zzzzzzzzzz
Header:
- โดยทั่วไปแล้ว header จะประกอบด้วยสองส่วน: ประเภทของโทเค็น ซึ่งก็คือ JWT และอัลกอริทึมการลงนามที่ใช้ เช่น HMAC SHA256 หรือ RSA
- ตัวอย่าง Header (เข้ารหัส base64):
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Payload:
- payload มี claims claims คือคำสั่งเกี่ยวกับเอนทิตี (โดยทั่วไปคือผู้ใช้) และข้อมูลเพิ่มเติม
- มี claims สามประเภท: claims ที่ลงทะเบียน, claims สาธารณะ และ claims ส่วนตัว
- ตัวอย่าง Payload (เข้ารหัส base64):
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
Signature:
- ในการสร้างส่วน signature คุณต้องใช้ header ที่เข้ารหัส, payload ที่เข้ารหัส, ความลับ, อัลกอริทึมที่ระบุใน header และลงนามในสิ่งนั้น
- signature ใช้เพื่อตรวจสอบว่าผู้ส่ง JWT คือผู้ที่กล่าวว่าเป็นจริงและเพื่อให้แน่ใจว่าข้อความไม่ได้ถูกเปลี่ยนแปลงระหว่างทาง
- ตัวอย่าง Signature:
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
นำมารวมกันทั้งหมด:
Header: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Payload: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
Signature: HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
JWT ที่เข้ารหัส:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwia
ประโยชน์ของการใช้ JWT:
JWTs มีอ็อบเจกต์ JSON ที่เข้ารหัสและลงนาม เพื่อให้มั่นใจถึงความสมบูรณ์และความถูกต้องโดยไม่ต้องพึ่งพาเซสชันแบบมีสถานะบนเซิร์ฟเวอร์
ประโยชน์หลักบางประการที่ทำให้ JWTs มีประโยชน์คือ:
- ขนาดกะทัดรัดจากการเข้ารหัส JSON ที่ปลอดภัยสำหรับ URL เพื่อประสิทธิภาพด้านพื้นที่
- มีข้อมูลทั้งหมดที่จำเป็นสำหรับผู้ใช้เพื่อหลีกเลี่ยงการสืบค้นฐานข้อมูลมากเกินไป
- ลายเซ็นดิจิทัลเพื่อความปลอดภัยและตรวจสอบความถูกต้อง
- ลักษณะที่ไม่มีสถานะเพื่อปรับปรุงความสามารถในการปรับขนาดโดยการลบเซสชันฝั่งเซิร์ฟเวอร์
- การทำงานร่วมกันสากลกับตัวแยกวิเคราะห์ JSON ที่มีอยู่ในภาษาส่วนใหญ่
- ขยายได้ผ่านฟิลด์ข้อมูลที่กำหนดเองโดยไม่ทำลายเฟรมเวิร์กที่มีอยู่
JWT เทียบกับ OAuth: ความแตกต่างระหว่าง JWT และ OAuth
JWT (JSON Web Token) และ OAuth มีความเกี่ยวข้องแต่มีวัตถุประสงค์ที่แตกต่างกันในบริบทของการตรวจสอบสิทธิ์และการอนุญาตในการพัฒนาเว็บ นี่คือการเปรียบเทียบสั้นๆ ของ JWT และ OAuth:
JWT (JSON Web Token):
- วัตถุประสงค์: JWT เป็นวิธีที่กะทัดรัดและมีอยู่ในตัวเพื่อส่งข้อมูลระหว่างฝ่ายต่างๆ อย่างปลอดภัย โดยทั่วไปจะใช้สำหรับการตรวจสอบสิทธิ์และการแลกเปลี่ยนข้อมูล
- เนื้อหา: JWT มี claims เกี่ยวกับเอนทิตี (โดยทั่วไปคือผู้ใช้) และมักใช้สำหรับการตรวจสอบสิทธิ์ผู้ใช้ claims สามารถรวมถึง ID ผู้ใช้ บทบาท สิทธิ์ และข้อมูลอื่นๆ ที่เกี่ยวข้อง JWTs มักใช้เพื่อสร้างระบบการตรวจสอบสิทธิ์แบบไม่มีสถานะ
- การใช้งาน: โดยปกติแล้ว JWTs จะถูกส่งเป็นส่วนหนึ่งของส่วนหัวคำขอในคำขอ HTTP ใช้เพื่อแสดงถึงตัวตนและสิทธิพิเศษของผู้ใช้
OAuth (Open Authorization):
- วัตถุประสงค์: OAuth เป็นกรอบการทำงานสำหรับการอนุญาต ทำให้แอปพลิเคชันของบุคคลที่สามสามารถเข้าถึงทรัพยากรของผู้ใช้บนเซิร์ฟเวอร์อื่นได้โดยไม่ต้องเปิดเผยข้อมูลประจำตัวของผู้ใช้ OAuth ไม่ได้ออกแบบมาสำหรับการตรวจสอบสิทธิ์ แต่สำหรับการมอบอำนาจ
- บทบาท: OAuth กำหนดบทบาท เช่น เจ้าของทรัพยากร ไคลเอนต์ เซิร์ฟเวอร์การอนุญาต และเซิร์ฟเวอร์ทรัพยากร ช่วยให้สถานการณ์ที่ผู้ใช้สามารถให้สิทธิ์เข้าถึงทรัพยากรของตน (เช่น รูปภาพ รายชื่อติดต่อ) ไปยังแอปพลิเคชันอื่นได้โดยไม่ต้องแชร์ข้อมูลประจำตัว
- ประเภทการให้สิทธิ์: OAuth แนะนำประเภทการให้สิทธิ์ (รหัสการอนุญาต, โดยนัย, ข้อมูลประจำตัวของไคลเอนต์, รหัสผ่าน ฯลฯ) เพื่อระบุวิธีการดำเนินการอนุญาต
- โทเค็น: OAuth เกี่ยวข้องกับการใช้โทเค็นการเข้าถึงและโทเค็นการรีเฟรช โทเค็นการเข้าถึงใช้เพื่อเข้าถึงทรัพยากรที่ได้รับการป้องกัน และโทเค็นการรีเฟรชสามารถใช้เพื่อรับโทเค็นการเข้าถึงใหม่ได้
ความแตกต่างที่สำคัญ:
- วัตถุประสงค์: JWT ส่วนใหญ่ใช้สำหรับการตรวจสอบสิทธิ์และการแลกเปลี่ยนข้อมูล ในขณะที่ OAuth เป็นกรอบการทำงานสำหรับการอนุญาต
- เนื้อหา: JWT มี claims เกี่ยวกับผู้ใช้ ในขณะที่ OAuth มุ่งเน้นไปที่การกำหนดบทบาทและสิทธิ์และการจัดการการเข้าถึงทรัพยากร
- บทบาท: JWT มักใช้เพื่อแสดงถึงตัวตนของผู้ใช้ ในขณะที่ OAuth เกี่ยวข้องกับบทบาทต่างๆ เช่น เจ้าของทรัพยากร ไคลเอนต์ เซิร์ฟเวอร์การอนุญาต และเซิร์ฟเวอร์ทรัพยากร
- โทเค็น: JWT เป็นโทเค็นประเภทหนึ่งที่ใช้สำหรับการตรวจสอบสิทธิ์ ในขณะที่ OAuth แนะนำโทเค็นการเข้าถึงและโทเค็นการรีเฟรชสำหรับการจัดการการอนุญาต
JWT ทำงานอย่างไร
JSON Web Tokens (JWTs) มีบทบาทสำคัญในการตรวจสอบสิทธิ์โดยการจัดหาวิธีที่ปลอดภัยและมีประสิทธิภาพในการตรวจสอบตัวตนของผู้ใช้ โดยทั่วไปแล้วกระบวนการนี้เกี่ยวข้องกับขั้นตอนต่อไปนี้:
- การตรวจสอบสิทธิ์ผู้ใช้: ผู้ใช้ลงชื่อเข้าใช้โดยใช้ชื่อผู้ใช้และรหัสผ่านหรือผ่านผู้ให้บริการภายนอก เช่น Google หรือ Facebook เซิร์ฟเวอร์การตรวจสอบสิทธิ์จะตรวจสอบข้อมูลประจำตัวและออก JSON Web Token (JWT) ที่รับรองตัวตนของผู้ใช้
- การสร้าง JWT: ผู้ให้บริการข้อมูลประจำตัว (IdP) สร้าง JWT โดยลงนามด้วยเกลือลับหรือคีย์ส่วนตัว JWT นี้จะสรุปข้อมูลผู้ใช้ที่จำเป็น เช่น ID ผู้ใช้ บทบาท และเวลาหมดอายุ
- การใช้งาน JWT: ไคลเอนต์ของผู้ใช้จะจัดเก็บ JWT ที่ได้รับระหว่างการตรวจสอบสิทธิ์อย่างปลอดภัย เมื่อเข้าถึงทรัพยากรที่ได้รับการป้องกัน ไคลเอนต์จะรวม JWT ไว้ในส่วนหัวการอนุญาต HTTP
- การตรวจสอบโทเค็น: เซิร์ฟเวอร์ทรัพยากรจะถอดรหัสและตรวจสอบความถูกต้องของ JWT โดยใช้เกลือลับหรือคีย์สาธารณะที่ให้ไว้ กระบวนการนี้ช่วยให้มั่นใจถึงความสมบูรณ์และต้นกำเนิดของโทเค็น
JWT ใน Apidog
Apidog เป็นเครื่องมือพัฒนาและทดสอบ API ที่ใช้งานง่ายซึ่งมีความโดดเด่นในการจัดการ JSON Web Tokens (JWT) ด้วยอินเทอร์เฟซที่ใช้งานง่าย Apidog ทำให้กระบวนการจัดการ JWT ง่ายขึ้น โดยให้การสนับสนุนอัตโนมัติสำหรับการสร้างโทเค็น การจัดการแบบไดนามิก และการรวมเข้ากับคำขอ API ได้อย่างราบรื่น

เครื่องมือนี้ช่วยปรับปรุงด้านต่างๆ ที่เกี่ยวข้องกับ JWT ของการพัฒนา API ทำให้ผู้พัฒนามุ่งเน้นไปที่การทดสอบและการรวมเข้ากับเวิร์กโฟลว์ของตนอย่างมีประสิทธิภาพ