ต้องมีการตั้งค่าใดบ้างเพื่อให้การแอบอ้างทำงานสำหรับแอปพลิเคชัน Classic ASP ที่ทำงานภายใต้ IIS 7.5 ฉันทำให้มันทำงานได้อย่างสมบูรณ์บนเซิร์ฟเวอร์ทดสอบของฉัน (Windows Server 2008 R2) แต่ฉันมีผู้ใช้ที่พยายามทำให้มันทำงานบนเซิร์ฟเวอร์ R2 ของพวกเขา และฉันไม่สามารถทราบได้ว่าการตั้งค่าใดที่พวกเขามีผิด

ต่อไปนี้คือข้อมูลพื้นฐานสำหรับวิธีตั้งค่าแอปบนเซิร์ฟเวอร์ทดสอบของฉัน:

  • การตรวจสอบสิทธิ์ขั้นพื้นฐานเป็นวิธีการรับรองความถูกต้องเท่านั้นที่เปิดใช้งาน
  • แอปพลิเคชัน IIS ทำงานภายใต้ Application Pool ที่เปิดใช้งาน 32 บิตซึ่งทำงานในโหมดคลาสสิก
  • App Pool ทำงานเมื่อ NetworkService และ Load User Profile ถูกตั้งค่าเป็น False

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

อะไรจะหยุดการเลียนแบบจากการทำงานโดยสมมติว่าเซิร์ฟเวอร์นั้นได้รับการตั้งค่าตามที่ระบุไว้ข้างต้น ฉันคิดว่าการตั้งค่า web.config จะไม่เกี่ยวข้องกับสิ่งนี้ เนื่องจากเป็นแอปพลิเคชัน Classic ASP และไม่ใช่แอป ASP.NET แต่เพื่อเป็นการเตะ ฉันพยายาม "ทำลาย" เซิร์ฟเวอร์ทดสอบของฉันแล้วใส่<identity impersonate="false"/>ลงในไฟล์ปรับแต่ง อย่างที่ฉันสงสัย มันไม่มีผลใดๆ และการแอบอ้างบุคคลอื่นยังคงทำงานได้ดี

ฉันควรตรวจสอบการตั้งค่าใด พวกเขาบอกว่าพวกเขา "ล็อก" เซิร์ฟเวอร์นี้ ดังนั้นฉันแน่ใจว่าการตั้งค่าบางอย่างต้องหยุดการทำงานนี้

answer

ในที่สุดฉันก็พบคำตอบ! เซิร์ฟเวอร์ที่มีปัญหาการแอบอ้างบุคคลอื่นมีคุณสมบัติ "ดำเนินการใน MTA" ที่ตั้งค่าเป็น True ในการตั้งค่า ASP เมื่อเราเปลี่ยนกลับเป็นเท็จ (ซึ่งเป็นค่าเริ่มต้นสำหรับ ExecuteInMta) การแอบอ้างบุคคลอื่นเริ่มทำงานอีกครั้ง

หากต้องการค้นหาการตั้งค่านี้ ให้คลิกที่ Default Web Site แล้วดับเบิลคลิกที่ ASP จากนั้นขยายส่วน "คุณสมบัติ Com Plus" ในกลุ่มบริการ ฉันหวังว่านี่จะช่วยได้หากมีคนอื่นพบปัญหานี้