Contents

JWT คืออะไรและทำงานอย่างไร

กลไกการตรวจสอบสิทธิ์และการอนุญาตที่ปลอดภัยมีความสำคัญอย่างยิ่งในการปกป้องข้อมูลที่ละเอียดอ่อน กลไกหนึ่งที่ได้รับความนิยมอย่างมากคือ JSON Web Tokens (JWT)

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

รู้เบื้องต้นเกี่ยวกับ JWT

/th/images/jwt-io-homepage-screenshot.jpg

JWT เป็นโครงสร้างข้อมูลในตัวเองที่ทั้งสองฝ่ายสามารถใช้เพื่อถ่ายโอนข้อมูลได้ JWT ประกอบด้วยสามส่วนที่แตกต่างกัน: ส่วนหัว เพย์โหลด และลายเซ็น แต่ละชิ้นมีจุดประสงค์เฉพาะในการรับรองความสมบูรณ์และความถูกต้องของโทเค็น

ส่วนหัวประกอบด้วยข้อมูลเกี่ยวกับหมวดหมู่ของโทเค็นตลอดจนวิธีการเข้ารหัสที่ใช้สำหรับการรับรองความถูกต้อง ซึ่งช่วยเหลือผู้รับในการประเมินขั้นตอนที่จำเป็นสำหรับการตรวจสอบและจัดการโทเค็นอย่างมีประสิทธิภาพ

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

ลายเซ็นดิจิทัลจะรวมส่วนหัวที่เข้ารหัส เนื้อหาข้อความ และคีย์การเข้ารหัสที่เป็นความลับที่เซิร์ฟเวอร์ครอบครองไว้แต่เพียงผู้เดียว การรวมกันนี้ทำหน้าที่รักษาความจริงและความสมบูรณ์ของโทเค็นการตรวจสอบสิทธิ์

ทำไมต้อง JWT?

JWT หรือ JSON Web Tokens กลายเป็นส่วนสำคัญของการสร้างเว็บร่วมสมัยเนื่องจากปัจจัยสำคัญหลายประการ:

JWT มีข้อได้เปรียบเหนือวิธีการพิสูจน์ตัวตนแบบเซสชันทั่วไปตรงที่พวกมันทำงานบนพื้นฐานไร้สัญชาติ ต่างจากวิธีการเหล่านี้ซึ่งจำเป็นต้องมีการจัดเก็บข้อมูลฝั่งเซิร์ฟเวอร์และการจัดการเซสชันสำหรับข้อมูลผู้ใช้ JWT ไม่ต้องการทรัพยากรดังกล่าว ด้วยเหตุนี้ คุณลักษณะของ JWT นี้จึงช่วยเพิ่มความสามารถในการปรับขนาดและการกระจายภาระการคำนวณระหว่างเซิร์ฟเวอร์หลายเครื่องภายในแอปพลิเคชันได้อย่างมีประสิทธิภาพ

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

JWT (JSON Web Tokens) นำเสนอการรักษาความปลอดภัยขั้นสูงผ่านการใช้ลายเซ็นดิจิทัลที่ตรวจสอบความถูกต้องของโทเค็น นอกจากนี้ JWT ยังลดช่องโหว่ของข้อมูลโดยบรรจุเฉพาะข้อมูลที่จำเป็นไว้ในเพย์โหลดเท่านั้น

JWT มีข้อดีหลายประการที่ทำให้เหมาะสมกับแอปพลิเคชันบนมือถือและสภาพแวดล้อมที่มีแบนด์วิธต่ำ รวมถึงขนาดที่ค่อนข้างเล็กและประสิทธิภาพในระดับสูง

ขั้นตอนการดำเนินงาน JWT

/th/images/jwt-payload-overview.jpg

หากต้องการใช้ JSON Web Tokens (JWT) ภายในแอปพลิเคชันของคุณ คุณจะต้องปฏิบัติตามชุดโปรโตคอลและขั้นตอนต่างๆ ตามที่ระบุไว้ด้านล่าง:

เมื่อเซิร์ฟเวอร์รับรองความถูกต้องของผู้ใช้สำเร็จ ระบบจะสร้าง JSON Web Token (JWT) โทเค็นนี้สร้างขึ้นจากการผสมผสานระหว่างส่วนหัว เพย์โหลด และคีย์ลับ หลังจากการสร้างนี้ โทเค็นที่สร้างขึ้นจะถูกส่งจากเซิร์ฟเวอร์ไปยังไคลเอนต์เพื่อการประมวลผลต่อไป

การจัดเก็บโทเค็นเป็นส่วนสำคัญของการรับรองความถูกต้องซึ่งไคลเอนต์จะรักษาโทเค็นไว้อย่างปลอดภัยเพื่อใช้ในอนาคต ซึ่งอาจเกี่ยวข้องกับการจัดเก็บ JSON Web Tokens (JWT) โดยใช้ที่จัดเก็บในตัวเครื่องหรือกลไกการจัดเก็บที่ปลอดภัยที่มีอยู่ในระบบนิเวศของแพลตฟอร์ม ช่วยให้มั่นใจได้ว่าข้อมูลที่ละเอียดอ่อนยังคงได้รับการปกป้องในขณะเดียวกันก็ให้การเข้าถึงที่ราบรื่นแก่ผู้ใช้ที่ได้รับอนุญาต

เพื่อพิสูจน์ตัวตนคำขอที่ต้องมีการรับรองความถูกต้อง ไคลเอนต์ส่ง JWT ภายในส่วนหัวของข้อความหรือเป็นพารามิเตอร์ประกอบ เมื่อได้รับ เซิร์ฟเวอร์จะตรวจสอบโทเค็นและดึงข้อมูลที่เกี่ยวข้องจากเพย์โหลด

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

ด้วยการยึดมั่นในมาตรการข้างต้น เราจึงสามารถใช้ประโยชน์จากความสามารถของ JSON Web Tokens (JWT) ได้อย่างมีประสิทธิภาพเพื่อสร้างแพลตฟอร์มบนเว็บที่แข็งแกร่งและขยายได้พร้อมคุณสมบัติความปลอดภัยที่ได้รับการปรับปรุง

JWT ใช้กรณีและการใช้งาน

JWT ได้เปลี่ยนแปลงขอบเขตของการรักษาความปลอดภัยด้วยการใช้งานมากมายในอุตสาหกรรมต่างๆ ความอเนกประสงค์ของ JWT ทำให้ JWT กลายเป็นเครื่องมือสำคัญในการรักษาความปลอดภัยข้อมูลประจำตัวดิจิทัลและรับรองความสมบูรณ์ของข้อมูล ประเด็นสำคัญบางประการที่ JWT ถูกนำมาใช้อย่างประสบความสำเร็จ ได้แก่ การควบคุมการเข้าถึง การรับรองความถูกต้อง และการอนุญาต เช่นเดียวกับการกระจายเนื้อหาและการจัดการผู้ใช้ นอกจากนี้ JWT ยังสามารถใช้เพื่อรักษาความปลอดภัยคำขอและการตอบกลับ API ทำให้ง่ายต่อการจัดการการผสานรวมของบุคคลที่สามในขณะที่รักษาความปลอดภัยในระดับสูง

การรับรองความถูกต้องของผู้ใช้เป็นส่วนสำคัญของการพัฒนาเว็บแอปพลิเคชันสมัยใหม่ วิธีการที่ใช้กันอย่างแพร่หลายวิธีหนึ่งเกี่ยวข้องกับการใช้ JSON Web Tokens (JWT) เพื่ออำนวยความสะดวกในกระบวนการนี้ โทเค็นเหล่านี้ทำหน้าที่เป็นวิธีการที่เซิร์ฟเวอร์สามารถตรวจสอบตัวตนของผู้ใช้ได้อย่างมีประสิทธิภาพในระหว่างการโต้ตอบในภายหลัง โดยเฉพาะอย่างยิ่ง การขาดการพึ่งพากลไกการจัดเก็บข้อมูลตามเซสชันโดยธรรมชาติของ JWT มีส่วนทำให้ระบบขยายขีดความสามารถโดยรวมได้ดีขึ้น

Single Sign-On (SSO) ได้รับการอำนวยความสะดวกโดยใช้ JSON Web Tokens (JWT) หลังจากเข้าสู่ระบบเริ่มต้น JWT อาจถูกสร้างขึ้นเพื่อให้สิทธิ์การเข้าถึงแอปพลิเคชันที่เชื่อมต่อ วิธีนี้จะช่วยเพิ่มความคล่องตัวให้กับกระบวนการและรักษาการควบคุมการรับรองความถูกต้องที่ปลอดภัย

การสื่อสารที่ปลอดภัยสามารถทำได้ผ่านการใช้ JSON Web Tokens (JWT) ด้วยการใช้โทเค็นเหล่านี้ ไมโครเซอร์วิสและ API สามารถตรวจสอบสิทธิ์คำขอได้โดยไม่จำเป็นต้องพึ่งพาเซิร์ฟเวอร์การตรวจสอบสิทธิ์แบบรวมศูนย์ วิธีการกระจายอำนาจนี้ไม่เพียงแต่ช่วยเพิ่มความสามารถในการปรับขนาดโดยรวมเท่านั้น แต่ยังช่วยลดความเครียดที่เกิดจากทรัพยากรเครือข่ายอีกด้วย

JWT (JSON Web Tokens) อำนวยความสะดวกในกระบวนการตรวจสอบสิทธิ์ที่ราบรื่นโดยไม่จำเป็นต้องใช้วิธีรหัสผ่านแบบเดิม ด้วยการใช้ประโยชน์จาก JWT ผู้ใช้จะสามารถเข้าถึงผ่านการยืนยันทางอีเมลหรือข้อความ ซึ่งจะช่วยปรับปรุงทั้งประสบการณ์และมาตรการรักษาความปลอดภัย ในขณะเดียวกันก็ลดความเสี่ยงที่อาจเกิดขึ้นที่เกี่ยวข้องกับข้อมูลประจำตัวที่ถูกขโมย

ข้อควรพิจารณาด้านความปลอดภัยของ JWT

ความน่าเชื่อถือของ JSON Web Tokens (JWT) ขึ้นอยู่กับการดำเนินการตามขั้นตอนการตรวจสอบที่เข้มงวด โปรโตคอลดังกล่าวครอบคลุมการรับรองความถูกต้องของลายเซ็น ทางเลือกของอัลกอริธึมการเข้ารหัส การยืนยันการประทับเวลา และการยืนยันของผู้ออก

การปกป้อง JWT จากการปลอมแปลงและการปลอมแปลง

เพื่อเพิ่มความปลอดภัยของ JSON Web Tokens (JWT) ขอแนะนำให้เซ็นชื่อโดยใช้เทคนิคการเข้ารหัสที่มีประสิทธิภาพ เช่น HMAC หรือ RSA กระบวนการตรวจสอบนี้ควรเกิดขึ้นระหว่างการตรวจสอบโทเค็นเพื่อรับประกันทั้งความปลอดภัยและความถูกต้อง นอกจากนี้ การปกป้องคีย์ลับที่ใช้ในการลงนาม JWT เป็นสิ่งสำคัญโดยการใช้มาตรการป้องกันการเข้าถึงโดยไม่ได้รับอนุญาต การใช้การหมุนเวียนคีย์และแนวทางปฏิบัติในการจัดเก็บคีย์ที่ปลอดภัยช่วยเสริมมาตรการรักษาความปลอดภัยโดยรวม

การป้องกันช่องโหว่ด้านความปลอดภัยทั่วไปของ JWT

เพื่อป้องกันการละเมิดที่อาจเกิดขึ้น ขอแนะนำให้รวมอายุการใช้งานที่จำกัดไว้ใน JSON Web Token ของคุณโดยใช้การประทับเวลาหมดอายุ มาตรการนี้ช่วยทำให้โทเค็นที่ล้าสมัยเป็นโมฆะและป้องกันไม่ให้นำไปใช้เพื่อวัตถุประสงค์ที่เป็นอันตราย การรวมคำกล่าวอ้าง’ผู้ชม’ไว้ใน JWT ช่วยให้คุณสามารถจำกัดการเผยแพร่ไปยังฝ่ายใดฝ่ายหนึ่งได้ ดังนั้นจึงป้องกันการเข้าถึงที่ไม่พึงประสงค์ เพื่อลดความเสี่ยงด้านความปลอดภัย จำเป็นต้องตรวจสอบว่าผู้รับที่กำหนดสอดคล้องกับค่าที่คาดการณ์ไว้หรือไม่ หากมีข้อสงสัยว่ามีการละเมิดหรือใช้งานโดยไม่ได้รับอนุญาต การเพิกถอนหรือขึ้นบัญชีดำ JWT ที่ได้รับผลกระทบกลายเป็นสิ่งจำเป็น โดยเป็นส่วนหนึ่งของกลยุทธ์การรักษาความปลอดภัยเชิงรุก

ข้อควรพิจารณาด้านความปลอดภัยเพิ่มเติม

เพื่อรับรองความปลอดภัยของ JSON Web Tokens (JWT) ควรส่งโทเค็นผ่านโปรโตคอลการสื่อสารที่ปลอดภัย เช่น HTTPS เพื่อป้องกันการเข้าถึงโดยไม่ได้รับอนุญาตจากบุคคลที่สามซึ่งอาจดักจับโทเค็นระหว่างการส่ง นอกจากนี้ สิ่งสำคัญคือต้องลดขนาดของเพย์โหลด JWT เพื่อจำกัดโอกาสที่ข้อมูลที่ละเอียดอ่อนจะถูกเปิดเผย โดยทั่วไป ข้อมูลที่ละเอียดอ่อนควรถูกจัดเก็บไว้ในฝั่งเซิร์ฟเวอร์ แทนที่จะรวมอยู่ใน JWT เอง นอกจากนี้ การตรวจสอบและฆ่าเชื้อ JWT หลังจากการสร้างขึ้นเป็นสิ่งสำคัญอย่างยิ่ง เพื่อลดความเสี่ยงที่เกี่ยวข้องกับช่องโหว่ที่อาจเกิดขึ้น เช่น การโจมตีแบบฉีด

ทางเลือก JWT ยอดนิยม

ก่อนที่จะมีการถือกำเนิดของ JSON Web Tokens (JWT) ได้มีการใช้วิธีการต่างๆ เพื่อวัตถุประสงค์ในการตรวจสอบสิทธิ์และการควบคุมการเข้าถึง ด้วยเหตุนี้ จึงเป็นที่น่าสังเกตว่ามีแนวทางทางเลือกบางประการซึ่งอาจปรับให้เหมาะกับความต้องการเฉพาะของแอปพลิเคชันที่กำหนด ขณะนี้จะมีการสำรวจตัวเลือกดังกล่าวบางส่วนโดยละเอียดด้านล่าง

เซสชันเก็บสถานะ

ตัวเลือกทั่วไปสำหรับ JWT คือการใช้เซสชัน stateful โดยเซิร์ฟเวอร์ ซึ่งเซิร์ฟเวอร์จะรักษาข้อมูลเซสชัน แม้ว่าแนวทางนี้จะช่วยให้สามารถควบคุมการจัดการเซสชันบนฝั่งเซิร์ฟเวอร์ได้ดีขึ้น แต่ก็สามารถนำเสนอปัญหาด้านความสามารถในการปรับขนาดและช่องโหว่ต่อการโจมตีบางประเภทได้

OAuth 2.0

OAuth 2.0 เป็นมาตรฐานการตรวจสอบสิทธิ์ที่ใช้กันอย่างแพร่หลาย ซึ่งช่วยให้ผู้ใช้สามารถให้สิทธิ์ที่จำกัดแก่แอปพลิเคชันภายนอก โดยการออกโทเค็นสำหรับตรวจสอบคำขอและใช้โครงสร้างเพื่อวัตถุประสงค์ในการอนุญาตและการตรวจสอบ ความยืดหยุ่นของวิธีการนี้เหมาะอย่างยิ่งสำหรับสถานการณ์ที่จำเป็นต้องมีการควบคุมการเข้าถึงในระดับที่เฉพาะเจาะจงสูง

เชื่อมต่อ OpenID

OpenID Connect (OIDC) ใช้ประโยชน์จากรากฐานของ OAuth 2.0 โดยการรวมเลเยอร์เพิ่มเติมสำหรับการตรวจสอบสิทธิ์ ซึ่งนำเสนอวิธีการที่ใช้ได้ในระดับสากลในการยืนยันตัวตนของผู้ใช้ การปรับปรุงนี้อยู่ในรูปแบบของโทเค็น ID ซึ่งห่อหุ้มข้อมูลที่เกี่ยวข้องกับผู้ใช้แต่ละราย นอกจากนี้ โทเค็นเหล่านี้ยังทำหน้าที่เป็นข้อพิสูจน์ที่หักล้างไม่ได้เกี่ยวกับการระบุตัวตนที่ได้รับการตรวจสอบแล้วของแต่ละบุคคล เมื่อฟังก์ชันการรวมข้อมูลประจำตัวที่แข็งแกร่งและฟังก์ชันการลงชื่อเพียงครั้งเดียว (SSO) ที่ราบรื่นได้รับการพิจารณาว่าขาดไม่ได้ OIDC นำเสนอตัวเองว่าเป็นตัวเลือกที่เหมาะสมอย่างยิ่ง

SAML

Security Assertion Markup Language หรือ SAML เป็นภาษามาร์กอัปแบบขยายได้ซึ่งใช้ XML เพื่ออำนวยความสะดวกในการแลกเปลี่ยนข้อมูลความปลอดภัยที่เกี่ยวข้องกับการตรวจสอบสิทธิ์และการอนุญาต ด้วยการใช้วิธีการที่เป็นมาตรฐานนี้ บุคคลจะสามารถตรวจสอบตนเองผ่านแพลตฟอร์มดิจิทัลต่างๆ ได้โดยใช้รายละเอียดการเข้าสู่ระบบที่ไม่ซ้ำกันเพียงชุดเดียว ดังนั้นจึงเปิดใช้งานสิ่งที่เรียกว่าการตรวจสอบสิทธิ์แบบ"รวมศูนย์"

SAML ให้การรักษาความปลอดภัยระดับสูง แม้ว่าจะมีข้อจำกัดบางประการเนื่องจากการพึ่งพา XML ซึ่งอาจนำมาซึ่งปัญหาบางประการในการใช้งานและบำรุงรักษา

หลายภาษาและกรอบการทำงานรองรับ JWT

การใช้ JSON Web Tokens (JWT) อย่างเชี่ยวชาญสามารถปรับปรุงความปลอดภัยและความสามารถในการปรับขนาดของแอปพลิเคชันบนเว็บได้อย่างมาก การใช้งานการตรวจสอบสิทธิ์ JWT สามารถทำได้ในภาษาการเขียนโปรแกรมที่หลากหลาย เช่น Python นอกจากนี้ยังมีการสนับสนุนที่แข็งแกร่งสำหรับการตรวจสอบผู้ใช้ภายในแอปพลิเคชัน Flask ที่ใช้ JWT