• postmortem

รายงานหลังเหตุการณ์: ความล้มเหลวของการยืนยันตัวตนจากการแคช JWKS และการหมุนกุญแจการลงชื่อ

รายงานหลังเหตุการณ์สำหรับปัญหาการยืนยันตัวตนเมื่อวันที่ 8 มกราคม 2026 (PST)

Gao
Gao
Founder

หยุดเสียเวลาเป็นสัปดาห์กับการยืนยันตัวตนผู้ใช้
เปิดตัวแอปที่ปลอดภัยเร็วขึ้นด้วย Logto ผสานการยืนยันตัวตนผู้ใช้ภายในไม่กี่นาทีและมุ่งเน้นที่ผลิตภัณฑ์หลักของคุณ
เริ่มต้นใช้งาน
Product screenshot

วันที่: 8 มกราคม 2026 (PST)

ระยะเวลา: ~60 นาที

ผลกระทบ: ผู้ใช้บางรายในสภาพแวดล้อม production ประสบปัญหาไม่สามารถลงชื่อเข้าใช้และตรวจสอบ token ได้; การลงชื่อเข้าใช้ Console อาจได้รับผลกระทบ

สรุปเหตุการณ์

ปัญหาการไม่ตรงกันระหว่างกุญแจการลงชื่อที่ถูกหมุนใหม่กับ JWKS ที่ถูกแคชไว้บนโดเมน *.logto.io ของเรา ส่งผลให้การตรวจสอบ token ล้มเหลว เราได้ล้างแคช JWKS และย้อนกลับไปใช้กุญแจการลงชื่อก่อนหน้าเพื่อกู้คืนบริการ

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

ลำดับเหตุการณ์ (PST)

  • 16:00 น. เกิดเหตุการณ์ (จำนวนข้อผิดพลาด auth/token validation เพิ่มขึ้น)
  • 16:35 น. พบสาเหตุที่แท้จริง (JWKS ถูกแคชขณะที่เปลี่ยนกุญแจการลงชื่อ)
  • 16:41 น. ล้างแคช
  • 16:49 น. ย้อนกลับกุญแจการลงชื่อ
  • 17:00 น. บริการฟื้นตัว; เฝ้าสังเกตต่อเนื่อง

รายละเอียดเหตุการณ์

ผลกระทบ

ในช่วงเกิดเหตุการณ์ ผู้ใช้บางรายไม่สามารถลงชื่อเข้าใช้และตรวจสอบ token ล้มเหลว ซึ่งมีผลกระทบต่อผู้เช่าใน production หลายราย และอาจทำให้ไม่สามารถเข้าถึง Logto Console ได้

เราไม่พบหลักฐานของการเข้าถึงโดยไม่ได้รับอนุญาตที่เกี่ยวข้องกับเหตุการณ์นี้; ผลกระทบจำกัดอยู่ที่ความล้มเหลวของการยืนยันตัวตนเท่านั้น

การดำเนินการสำหรับลูกค้า

หากคุณยังไม่สามารถลงชื่อเข้าใช้ Logto Console ได้ โปรดลอง:

  • เปิดหน้าต่างไม่ระบุตัวตน/ส่วนตัว หรือ
  • ล้าง/ปิดใช้งานแคชเบราว์เซอร์ของคุณ แล้วลองอีกครั้ง

สิ่งที่เกิดขึ้น

  1. เราได้ปรับแต่งการแคช JWKS สำหรับโดเมนผู้เช่าของลูกค้า (*.logto.app) แต่การแคช JWKS ยังคงเปิดใช้งานโดยผิดพลาดบนโดเมน Cloud ของเรา (*.logto.io).
  2. เราได้หมุนกุญแจการลงชื่อสำหรับบริการ Cloud ของเรา เนื่องจากการตอบกลับ JWKS สำหรับ *.logto.io ถูกแคชไว้ บาง client ยังคงใช้ JWKS เก่าและไม่สามารถตรวจสอบ token ใหม่นั้นได้
  3. เราได้ล้างแคช JWKS สำหรับ *.logto.io, ย้อนกลับไปใช้กุญแจการลงชื่อก่อนหน้า แล้วล้างแคช JWKS อีกครั้งเพื่อให้แน่ใจว่า client ได้ใช้ชุดกุญแจที่ย้อนกลับใหม่
  4. การยืนยันตัวตนกลับคืนสู่สภาพปกติ ผู้ใช้บางรายอาจยังพบปัญหาในการลงชื่อเข้า Console เนื่องจากแคชของเบราว์เซอร์

บทเรียนที่ได้รับ

การหมุนกุญแจไม่ใช่แค่เรื่องของการบริหารกุญแจเพียงอย่างเดียว แต่มันเป็นการเปลี่ยนแปลงที่เกี่ยวเนื่องตั้งแต่ต้นจนจบ และต้องคำนึงถึงพฤติกรรมการแคชระหว่าง issuer กับ validator ความแตกต่างของค่าคอนฟิกข้ามโดเมน (*.logto.app กับ *.logto.io) เป็นความเสี่ยงที่แท้จริง การเปลี่ยนแปลงที่ปลอดภัยสำหรับหนึ่งโดเมนอาจทำให้โดเมนอื่นมีปัญหาได้หากไม่ถูกนำไปใช้สอดคล้องกัน

การทดสอบแบบบูรณาการที่เรามี ไม่ได้ครอบคลุมพฤติกรรมการแคช JWKS แบบ production ดังนั้นรูปแบบความล้มเหลวนี้จึงไม่เกิดขึ้นมาก่อนการหมุนกุญแจ

การป้องกันปัญหาในอนาคต

เรากำลังดำเนินการ:

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