ไทย

เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ · ตัวถอดรหัส JWT

JWT กับคุกกี้เซสชัน: โทเค็นไร้สัญชาติเปลี่ยนการตรวจสอบสิทธิ์เว็บอย่างไร

· พื้นหลัง

jwt การรับรองความถูกต้อง ความปลอดภัยของเว็บ

เส้นทางโทเค็นที่มีอยู่ในตัวเองเมื่อเปรียบเทียบกับเส้นทางการค้นหาเซสชันเซิร์ฟเวอร์
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

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

ทำไมไม่ใช้คุกกี้เซสชันล่ะ? — คำถามที่สมควรได้รับคำตอบที่แท้จริงก่อนที่จะนำ JWT มาใช้

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

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

เซสชันฝั่งเซิร์ฟเวอร์ — ID ทึบแสงในคุกกี้ที่ชี้ไปที่สถานะเซิร์ฟเวอร์ และสิ่งที่โมเดลนั้นทำงานได้ดี

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

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

การตรวจสอบความถูกต้องในตัวเองสามารถลดการค้นหาเซสชั่นที่แชร์ได้ ไม่สร้างความไว้วางใจระหว่างบริการโดยอัตโนมัติ

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

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

ค่าใช้จ่าย — การเพิกถอน ขนาดโทเค็นในทุกคำขอ และปัญหาด้านการจัดเก็บระหว่างคุกกี้และพื้นที่จัดเก็บบนเว็บ

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

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

CSRF และ XSS ขึ้นอยู่กับตัวเลือกการขนส่งและการจัดเก็บข้อมูลประจำตัว ไม่ใช่แค่ JWT เทียบกับป้ายกำกับเซสชัน

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

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

ตัวอย่างการทำงาน — ขั้นตอนการเข้าสู่ระบบเดียวกันกับที่อธิบายด้วยเซสชันและ JWT ทีละขั้นตอน

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

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

การออกแบบแบบไฮบริดยังคงต้องมีนโยบายการรีเฟรช การเพิกถอน และตัวตรวจสอบที่ชัดเจน

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

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

ประเด็นสำคัญ: การไร้สัญชาติเป็นการแลกเปลี่ยน ไม่ใช่การอัพเกรด — หากคุณเลือก JWT ตัวถอดรหัส ToolAcre JWT จะแสดงสิ่งที่แต่ละโทเค็นดำเนินการในทุกคำขอ

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

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