ฉันรู้ว่ามีรายงานหลายพันคนที่มีปัญหาในการใช้งาน Windows พิสูจน์ตัวจริงเพื่อทำงานกับ IIS แต่พวกเขาทั้งหมดดูเหมือนจะนำไปสู่หน้าเว็บที่ไม่ได้ใช้หรือการแก้ปัญหาที่ฉันได้ลองแล้ว ฉันเคยปรับใช้ไซต์หลายสิบแห่งเช่นนี้มาก่อนดังนั้นอาจมีบางสิ่งที่แปลกประหลาดเกิดขึ้นกับเซิร์ฟเวอร์ / การกำหนดค่าหรือฉันเคยดูสิ่งนี้มานานเกินไปและไม่เห็นชัดเจน
ใส่เพียงแค่ทุกอย่างทำงานได้อย่างสมบูรณ์แบบในเครื่องท้องถิ่นของฉัน แต่ตรงแยกบนเซิร์ฟเวอร์การผลิตซึ่งเท่าที่ผมสามารถบอกได้ว่ามีการกำหนดค่าเดียวกันแน่นอน
บนเครื่องท้องถิ่น:
- เครื่องกำลังใช้งาน Windows 7 Ultimate, Service Pack 1, IIS 7.5
- ไซต์ได้รับการทดสอบเรียบร้อยแล้วโดยใช้ IIS และ VS Web Development Server
- การกำหนดค่าไซต์ IIS ปิดใช้งานวิธีการรับรองความถูกต้องทั้งหมดยกเว้น Windows Authentication
- เครื่องท้องถิ่นไม่ได้อยู่ในโดเมนใด ๆ
- ผู้ให้บริการตั้งค่าเป็นเจรจาต่อรองและ NTLM (ไม่ใช่เจรจา: Kerberos)
- การป้องกันเพิ่มเติมปิดอยู่
- เบราว์เซอร์ทั้งหมดที่ทดสอบ (IE, Firefox, Chrome) แสดงข้อความแจ้งเตือนและอนุญาตให้ฉันเข้าสู่โดเมนlocalhostด้วยบัญชี Windows ของฉัน (ในพื้นที่)
- เบราว์เซอร์ทั้งหมดที่ผ่านการทดสอบใช้งานได้กับที่อยู่ IP ในพื้นที่ทึบ - เบราว์เซอร์เองดูเหมือนจะไม่สนใจว่าไซต์นั้นจะปรากฏเป็น "ท้องถิ่น" หรือ "ระยะไกล"
- ฉันได้เพิ่มบรรทัดการแสดงผลลงในหน้าเว็บที่แสดงผู้ใช้ที่เข้าสู่ระบบในปัจจุบันและมันแสดงให้เห็นสิ่งที่ฉันคาดหวัง (ผู้ใช้ท้องถิ่นที่ฉันเข้าสู่ระบบด้วย)
บนเครื่องระยะไกล:
- เซิร์ฟเวอร์กำลังเรียกใช้ Windows Server 2008 R2, IIS 7.5
- การโหลดหน้าเว็บทำให้เกิดข้อผิดพลาด 401.2 ทันที : คุณไม่ได้รับอนุญาตให้ดูหน้านี้เนื่องจากส่วนหัวการตรวจสอบสิทธิ์ที่ไม่ถูกต้อง ไม่มีข้อความแจ้งความท้าทายปรากฏขึ้น
- การกำหนดค่าไซต์ IIS ปิดใช้งานวิธีการรับรองความถูกต้องทั้งหมดยกเว้น Windows Authentication
- เครื่องระยะไกลไม่ได้อยู่ในโดเมนใด ๆ
- ผู้ให้บริการตั้งค่าเป็นเจรจาต่อรองและ NTLM (ไม่ใช่เจรจา: Kerberos)
- การป้องกันเพิ่มเติมปิดอยู่
- บนเครื่องระยะไกล (เซสชันเดสก์ท็อประยะไกล) ข้อผิดพลาดเดียวกันปรากฏขึ้นใน Internet Explorer ไม่ว่าโดเมนนั้นจะเป็นlocalhostหรือที่อยู่ IP ภายนอก
- หากฉันพยายามดูเว็บไซต์ระยะไกลจากเครื่องท้องถิ่นข้อผิดพลาดยังคงเป็น 401 แต่เป็น 401 ที่แตกต่างกันเล็กน้อยไม่มีโค้ดย่อยด้วยข้อความ: การเข้าถึงถูกปฏิเสธเนื่องจากข้อมูลประจำตัวที่ไม่ถูกต้อง
- Windows Authenticationคุณลักษณะบทบาท IIS ถูกติดตั้ง
- windowsauthenticationโมดูลจะเพิ่ม (ในระดับเซิร์ฟเวอร์)
- ข้อผิดพลาดเดียวกันที่แน่นอนเกิดขึ้นถ้าฉันปิดการรับรองความถูกต้องของ Windows และเปิดใช้งานการรับรองความถูกต้องเบื้องต้น
- เว็บไซต์ไม่โหลดถ้าฉันปิด Windows Authentication และเปิดใช้งานไม่ประสงค์ออกนาม (ชัด)
- ฉันได้ทำตามขั้นตอนการแก้ไขปัญหาทั้งหมดในฝ่ายสนับสนุนของ Microsoft แล้ว: การแก้ไขข้อผิดพลาด HTTP 401 ใน IIS
- ฉันได้ลองวิธีแก้ปัญหาที่แสดงในหน้าการสนับสนุนของ Microsoft อื่นแล้ว (ควรจะบังคับให้ NTLM เป็นวิธีการเดียวเท่านั้น)
สุดท้าย แต่ไม่ท้ายสุดฉันลองเปิด FREB เพื่อหาข้อผิดพลาด 401.2 และผลลัพธ์ดูเหมือนจะไม่บอกฉันว่ามีประโยชน์อะไรทั้งหมดที่ฉันเห็นคือคำเตือนต่อไปนี้:
MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName IIS เว็บหลัก
ประกาศ 2
HttpStatus 401
HttpReason ไม่ได้รับอนุญาต
HttpSubStatus 2
ErrorCode 2147942405
ConfigExceptionInfo
แจ้ง AUTHENTICATE_REQUEST
ErrorCode เข้าถึงถูกปฏิเสธ (0x80070005)
... นี่ดูเหมือนจะบอกฉันว่าฉันรู้แล้ว (ว่าเป็นเพียงการปฏิเสธคำขอแทนที่จะต่อรองข้อมูลรับรอง)
การติดตามไม่บ่งชี้ว่าโมดูล WindowsAuthentication ถูกโหลดอย่างถูกต้องเนื่องจากมีNOTIFY_MODULE_START
บรรทัดที่มีModuleName
= WindowsAuthentication
(และกิจกรรมการติดตาม ASP.NET อื่น ๆ - [un] โชคดีไม่มีข้อผิดพลาดหรือคำเตือนที่น่าสนใจที่นี่)
มีใครบอกฉันได้ไหมว่าฉันอาจพลาดที่นี่?
การอัปเดตด่วน:
ฉันรู้สึกไม่สบายใจเล็กน้อยที่ส่งการถ่ายโอนข้อมูล Wireshark ทั้งหมดเพราะมันจะเปิดเผย IP, URL และสิ่งอื่น ๆ แต่ฉันเปรียบเทียบการตอบสนอง HTTP จาก localhost และเซิร์ฟเวอร์ระยะไกลใน Fiddler และเปรียบเทียบกัน - ระบุว่าปัญหาคืออะไร:
localhost:
HTTP / 1.1 401 ไม่ได้รับอนุญาต การควบคุมแคช: ส่วนตัว ประเภทเนื้อหา: ข้อความ / html; charset = UTF-8 เซิร์ฟเวอร์: Microsoft-IIS / 7.5 ตรวจสอบ WWW: เจรจาต่อรอง ตรวจสอบ WWW: NTLM X-Powered-By: ASP.NET วันที่: เสาร์, 17 ธันวาคม 2011 23:42:34 GMT ความยาวเนื้อหา: 6399 การสนับสนุนพร็อกซี: การตรวจสอบตามเซสชัน
ระยะไกล:
HTTP / 1.1 401 ไม่ได้รับอนุญาต ประเภทเนื้อหา: ข้อความ / html เซิร์ฟเวอร์: Microsoft-IIS / 7.5 X-Powered-By: ASP.NET วันที่: เสาร์, 17 ธันวาคม 2011 23:43:13 GMT ความยาวเนื้อหา: 1293
นอกเหนือจากความแตกต่างที่เห็นได้ชัดไม่กี่อย่างเช่นการควบคุมแคชแล้วความแตกต่างที่สำคัญคือเซิร์ฟเวอร์ระยะไกลไม่ได้ส่งส่วนหัว WWW-Authenticate กลับไปยังไคลเอนต์
ดังนั้นฉันเดาว่าคำถามจะแคบลงถึง: เหตุใด IIS จึงไม่ส่งส่วนหัวรับรองความถูกต้อง WWW เมื่อ Windows Authentication ปรากฏขึ้นเพื่อติดตั้งโหลดและเปิดใช้งานโดยเฉพาะ