การแก้ไขปัญหาการรับรองความถูกต้อง Windows (ไม่ท้าทาย) ใน IIS 7.5 หรือไม่


21

ฉันรู้ว่ามีรายงานหลายพันคนที่มีปัญหาในการใช้งาน 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 ปรากฏขึ้นเพื่อติดตั้งโหลดและเปิดใช้งานโดยเฉพาะ


คิดว่าการเก็บข้อความธรรมดาของความพยายามในการรับรองความถูกต้อง (เปลี่ยนรหัสผ่านของคุณเป็นสิ่งที่ถูกทิ้งไว้ก่อน - เราไม่ต้องการแฮชรหัสผ่านจริงของคุณบนเน็ต)? 18 เดือนหรือน้อยกว่านั้นโปรแกรมปรับปรุง Windows ได้ทำการเปลี่ยนแปลงการเจรจา HTTP NTLM (โดยวิธีใดระบบได้รับการแก้ไขตลอดเวลาหรือไม่?) ซึ่งทำให้แอพของผู้ขายดีขึ้นและให้ประสบการณ์กับฉันมากกว่าที่ฉันจะยอมรับด้วยการวิเคราะห์ บทสนทนาการเจรจาต่อรอง
Shane Madden

@ShaneMadden: ฉันเป็นคนที่ค่อนข้างใส่ใจกับข้อมูลที่หลากหลายที่ฉันจะเปิดเผย แต่ฉันสามารถทำเซสชัน Fiddler ซึ่งควรจะเกือบเหมือนกันและอย่างน้อยฉันก็สามารถไม่เปิดเผยชื่อ IP และอื่น ๆ - และ ในความเป็นจริงฉันได้ทำแล้วผลลัพธ์ควรจะอธิบายได้ด้วยตนเอง (ลูกค้าไม่แสดงพรอมต์ข้อมูลรับรองเนื่องจากเซิร์ฟเวอร์ไม่ได้ขออะไร)
Aaronaught

โอ้น่าสนใจมีคนรายงานว่าปัญหาเรื่อง Stack Overflowเช่นกัน - ไม่มีคำตอบที่น่าเศร้า
Aaronaught

@Aaraught คุณได้รับชื่อผู้ใช้ที่แตกต่างจากการทำอาหารได้อย่างไร เมื่อฉันเห็นคำถามนี้ครั้งแรกฉันคิดว่าเป็นคนที่หลอกคุณ
Ward - Reinstate Monica

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

คำตอบ:


14

แก้ไขปัญหา. ในที่สุดฉันก็ตัดสินใจที่จะเปรียบเทียบรายการโมดูลเคียงข้างกันและมีสิ่งหนึ่งที่ขาดหายไป ปรากฎว่ามีโมดูล Windows Authentication สองโมดูล:

รายการโมดูล

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

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


โมดูล WindowsAuthentication ที่มีการจัดการไม่ใช่สิ่งที่ฟังดูเหมือน มันรองรับเอกลักษณ์ของ Windows ใน ASP.Net และติดตั้งอยู่เสมอ (เมื่อติดตั้ง ASP.Net) แต่ Windows Authentication พื้นเมืองโมดูลคือสิ่งที่ได้รับการติดตั้งเมื่อคุณติ๊กคอมโพเนนต์ของ Windows รับรองความถูกต้องในการจัดการเซิร์ฟเวอร์และนั่นคือสิ่งที่คุณต้องการในการสั่งซื้อสำหรับตัวเลือกการตรวจสอบว่าจะกลายเป็นมองเห็นได้ในการตรวจสอบสิทธิ์ GUI
TristanK

@TristanK: ในกรณีนี้ส่วนประกอบนั้นถูกทำเครื่องหมาย แต่โมดูลไม่ได้ถูกติดตั้ง (อย่างไรก็ตามตัวเลือกนี้ปรากฏใน Authentication GUI ดังนั้นฉันค่อนข้างแน่ใจว่าหน้าจอขึ้นอยู่กับโมดูลที่มีการจัดการไม่ใช่ตัวเนทีฟ)
Aaronaught

ฉันคิดว่ามันอาจเป็นไปได้ด้วยวิธีนี้เนื่องจากมีการดัดแปลงไฟล์ config (อาจเป็น ApplicationHost.config) แต่ฉันเดาว่ามันไม่สำคัญว่ามันจะชนะทั้งหมดได้อย่างไร มันทำ.
Aaronaught

ชัดเจนมาก Windows Auth ไม่ทำงานยกเว้นว่ามีบางอย่างผิดปกติ ในกรณีนี้ในขณะที่คำถามระบุว่าการกำหนดค่าเหมือนกันซึ่งกลายเป็นเรื่องจริง ดังนั้นมันจึงไม่ทำงานเหมือนเดิม QED
TristanK

1
ปัญหาโมดูลที่หายไปนี้เพียงแค่ฉันใน Windows Server 2012 R2 เป็นเรื่องเหลือเชื่อที่ไม่มีสิ่งบ่งชี้ว่าเกิดขึ้นเมื่อใด อย่างไรก็ตามขอบคุณมากสำหรับคำตอบนี้ ฉันกำลังฉีกเส้นผมของฉัน!
Rob Davis

4

เราพบว่าสิ่งนี้ไม่ได้ช่วยแก้ไขปัญหาสำหรับนักพัฒนาที่ทำงานในพื้นที่บนไซต์ ASP.NET ที่ทำงานภายใต้ Windows Authentication เราพบแฮ็ครีจิสทรีที่ปิดใช้งานการตรวจสอบย้อนกลับ มันคงที่: -

รีจิสตรีคีย์ - HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa

สร้าง DWORD ที่มีค่า 1 เรียกว่า "DisableLoopbackCheck"

คุณจะต้องรีบูตเครื่องเพื่อให้การตั้งค่ามีผล


ฉันพบว่าฉันสามารถสลับระหว่าง DisableLoopbackCheck เป็น 1 และ 0 และการเปลี่ยนแปลงจะมีผลทันที นอกจากนี้คุณสามารถดูรหัสเหตุการณ์ 4625 ในบันทึกเหตุการณ์บันทึกความปลอดภัยพร้อมข้อความ "บัญชีไม่สามารถเข้าสู่ระบบได้"
alastairtree

ขอขอบคุณ! 2 วัน faffing เกี่ยวกับการรับรองความถูกต้อง IIS และรุ่น. สุทธิเท่านั้นเพื่อค้นหามันเพราะฉันใช้ไฟล์โฮสต์ของฉันเพื่อสร้างรายการ DNS จำลองในขณะทดสอบการโยกย้ายไซต์
JohnLBevan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.