ข้อผิดพลาด LDAP ใน IIS7.5 ขณะใช้ windows Authentication

ฉันกำลังประสบปัญหากับ LDAP มันค่อนข้างแปลก เว็บเซิร์ฟเวอร์ของฉันคือ IIS7.5 (windows server 2008 R2) มันถูกกำหนดค่าให้ใช้ windows Authentication ฉันวางหน้า asp ของฉันไว้ด้านล่าง

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

ทุกอย่างทำงานได้ดีเป็นเวลา 20 นาที (การตั้งค่าเวลาเซสชันและการตั้งค่าการหมดเวลาเริ่มต้นอื่น ๆ คือ 20 นาที) หลังจากผ่านไป 20 นาที ฉันได้รับข้อผิดพลาดรันไทม์ ASP ซึ่งระบุว่าไม่รองรับวิธีการหรือคุณสมบัติ memberOf สำหรับวัตถุ objUser เมื่อฉันได้รับข้อผิดพลาดด้านล่าง ฉันจะเปลี่ยนประเภทการรับรองความถูกต้องเป็นการรับรองความถูกต้องพื้นฐาน มันแจ้งให้ระบุข้อมูลรับรอง Windows และทำงานได้ดี หลังจากนั้นฉันก็เปลี่ยนกลับไปใช้การรับรองความถูกต้องของ windows อีกครั้ง และมันได้ผลในบางครั้ง

ไม่แน่ใจว่า IIS7.5 id กำหนดค่าด้วยการเปิดใช้งานการรับรองความถูกต้องพื้นฐานและ IE8 ที่กำหนดค่าไว้ข้างต้นหรือไม่ แต่ทำไมจึงแจ้งเตือนให้ใส่ windows Credential แม้ว่าโหมดการรับรองความถูกต้องของ windows จะไม่พร้อมท์ให้ใส่ข้อมูลรับรอง แต่ก็ใช้งานได้ดีแต่ในช่วงระยะเวลาหนึ่ง ใครช่วยอธิบายฉันหน่อยได้ไหมว่าทำไมพฤติกรรมแปลก ๆ และวิธีแก้ปัญหานี้เพื่อแก้ไขปัญหานี้

<%@ LANGUAGE="VBSCRIPT" %>
<%
 Option Explicit

Dim oADSysInfo
Dim objUser
Dim strGroupData
Dim strUserDN
 Dim arrGroups
 Dim strGroup
 Dim wsObject
 Dim netSys
 Dim strUsrDomain

 strGroupData = ""
    Set wsObject = CreateObject("WScript.Shell")
 Set netSys =   CreateObject("WScript.Network")

 strUsrDomain = netSys.UserDomain
Set oADSysInfo = CreateObject("ADSystemInfo")

 If err.number <> 0 Then
 'getLDAPGroupInfo = strGroupData
  'wsObject.popup("Error"& e.decription)
 'Exit Function
 End If
 strUserDN = oADSysInfo.UserName
 Set objUser = GetObject("LDAP://"& strUserDN)
 arrGroups = objUser.memberOf

  If IsEmpty(arrGroups) Then
  'Wscript.Echo "Member of no groups"
 ElseIf (TypeName(arrGroups) = "String") Then
  'Wscript.Echo "Member of group " & arrGroups
  strGroupData = arrGroups
 Else

  For Each strGroup In arrGroups
   strGroupData = strGroupData & "," & strGroup
 Next
  'strGroupData = arrGroups


 End If 
     Response.Write(strGroupData)
%>

person Karthik Prasad    schedule 14.06.2012    source แหล่งที่มา
comment
ในการตรวจสอบเพิ่มเติม ฉันสังเกตเห็นว่าปัญหาเกิดขึ้นหลังจาก 20 นาที เนื่องจากกระบวนการหมดเวลาไม่ได้ใช้งานถูกตั้งค่าเป็น 20 นาที ในบันทึกเหตุการณ์ ฉันพบว่าเหตุการณ์ WAS ซึ่งกระบวนการของผู้ปฏิบัติงานอ่านถูกปิดเนื่องจากไม่มีการใช้งานสำหรับการหมดเวลาใช้งานที่ระบุ กระบวนการของผู้ปฏิบัติงานใหม่จะถูกสร้างขึ้นตามและเมื่อจำเป็น จากนี้ ฉันถือว่ากระบวนการของผู้ปฏิบัติงานที่สร้างนั้นใช้การตั้งค่าที่แตกต่างกัน ซึ่งทำให้กระบวนการล้มเหลว   -  person Karthik Prasad    schedule 16.06.2012
comment
วันนี้ฉันพบว่ามันทำงานได้ดีหลังจากที่ไม่ได้กล่าวถึงในความคิดเห็นก่อนหน้านี้ ถ้าฉันเข้าถึงเว็บไซต์โดยใช้ localhost แต่ขอข้อมูลรับรอง (ฉันถือว่าการตรวจสอบสิทธิ์พื้นฐานเปิดอยู่) หลังจากนั้น ฉันยังสามารถใช้เว็บแอปพลิเคชันจากเบราว์เซอร์อื่นที่เปิดใช้งานการรับรองความถูกต้องของ Windows ได้ ฉันไม่แน่ใจว่าสิ่งใดที่ทำให้เกิดปัญหา LDAP, IIS หรือการตั้งค่า IIS บางอย่างแทนที่การตั้งค่าเว็บไซต์ของฉัน   -  person Karthik Prasad    schedule 18.06.2012
comment
ปัญหาที่กล่าวถึงเมื่อวานนี้ล้วนเป็นตัวบ่งชี้ถึงปัญหาดับเบิ้ลฮอป มีกลไกง่ายๆ ในการแก้ไขปัญหานี้ในระดับเว็บเซิร์ฟเวอร์และไม่แตะเซิร์ฟเวอร์ LDAP หรือไม่   -  person Karthik Prasad    schedule 19.06.2012


คำตอบ (1)


ฉันใช้วิธีแก้ปัญหาที่ค่อนข้างง่าย

วิธีแก้ปัญหาที่ฉันใช้มีดังนี้

  1. แอปพลิเคชันของฉันทำงานภายใต้ข้อมูลประจำตัวผู้ใช้เฉพาะ (ข้อมูลรับรองเส้นทางทางกายภาพและรหัสประจำตัวกลุ่มแอปพลิเคชันที่ตั้งค่าเป็นบัญชี DNS)

  2. ฉันสร้างหน้าอื่นด้วยโค้ดด้านบนและทำงานภายใต้ applcation pool identity (SPN) และที่นั่นโดยสร้างคีย์โทเค็นหลักระหว่างเซิร์ฟเวอร์ Active Directory และเซิร์ฟเวอร์เว็บเซิร์ฟเวอร์

  3. การใช้คีย์นั้น ฉันเชื่อมต่อกับ LDAP อีกครั้งเพื่อค้นหาข้อมูลที่เกี่ยวข้องกับผู้ใช้โดยการเรียกโค้ดด้านบนภายใต้ไดเร็กทอรีเสมือนที่มีการรับรองความถูกต้องของ windows และและทำงานภายใต้ข้อมูลระบุตัวตนของผู้ใช้ โดยรับรายละเอียดผู้ใช้

หากคุณใช้ asp.net เลียนแบบผู้ใช้โดยทางโปรแกรม และรับรายละเอียดผู้ใช้จาก ldap และเมื่อแอปพลิเคชันเริ่มสร้างโทเค็นหลักโดยการเชื่อมต่อ ldap คีย์หลักจะคงอยู่จนกว่ากระบวนการของผู้ปฏิบัติงานจะถูกฆ่า

person Karthik Prasad    schedule 29.06.2012