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

สัญญาสองฉบับซ่อนอยู่หลังการตั้งค่าเดียว

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

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

การขับออกเกิดขึ้นก่อนฮุกเชื่อมต่อของคุณ

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

StageWho can still refuseEffect on the incumbent
Certificate checkServer trust configurationNone
Authentication decisionThe authentication controllerNone, because establishment has not run
Connect handlerA profile scriptAlready evicted in the same-name case
Post-establishmentStatus tooling, monitoringBoth sessions already exist or one is gone

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

ย้ายการตัดสินใจไปที่การพิสูจน์ตัวตน

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

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

โทเคนสามารถเดินผ่านประตูไปได้

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

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

ผูกการจองกับอินสแตนซ์ ไม่ใช่กับที่อยู่

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

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

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

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

บทความที่เกี่ยวข้อง