ในความเป็นจริงฉันกำลังดีบักแอป C # แต่เนื่องจากคำสั่งเดียวกันนี้เป็นไปได้ใน PowerShell ฉันจึงลองที่นั่น
ฉันกำลังพยายามตรวจสอบบัญชีผู้ใช้โดยใช้สิ่งต่อไปนี้ใน PowerShell:
> Add-Type -AssemblyName System.DirectoryServices.AccountManagement
> $ds = New-Object System.DirectoryServices.AccountManagement.PrincipalContext("domain", "<domain>", "<OuDN>", "negotiate", "<username>", "<password>")
> $ds.ValidateCredentials("<ชื่อผู้ใช้>", "<รหัสผ่าน>", "ต่อรอง")
คำสั่งสุดท้ายส่งคืนค่าเท็จเสมอ ฉันได้ตรวจสอบแล้วว่าข้อมูลประจำตัวนั้นถูกต้องโดยเข้าสู่ระบบด้วย เราได้ปิดการตรวจสอบสิทธิ์ NTLM ในสภาพแวดล้อมแล้ว และฉันสามารถเห็นทุกครั้งที่ดำเนินการ ตรวจสอบข้อมูลประจำตัว ()
การเชื่อมต่อ NTLM โดย lsass.exe ถูกบล็อก (รหัสเหตุการณ์ 4002 ในตัวแสดงเหตุการณ์) ฉันเปิดการบันทึก Kerberos แต่ไม่มีการสร้างเหตุการณ์ในตัวแสดงเหตุการณ์เมื่อพยายามตรวจสอบความถูกต้อง สิ่งนี้ทำให้ฉันเชื่อว่ามันไม่ได้พยายามตรวจสอบสิทธิ์ Kerberos ด้วยซ้ำ แต่ฉันอาจคิดผิดที่นี่
ฉันได้ตรวจสอบแล้วว่า SPN สำหรับคอมพิวเตอร์นั้นมีอยู่จริง setspn -L
และเนื่องจากการรับรองความถูกต้องของ Curb ทำงานได้ทุกที่ในระบบ ฉันจึงไม่แน่ใจว่าเป็นการกำหนดค่าที่ผิดพลาด
อัปเดต:
ฉันพบวิธีแก้ปัญหา แต่ยังไม่ได้โพสต์เป็นคำตอบเนื่องจากฉันยังมีพฤติกรรมแปลก ๆ ฉันเพิ่ม @<โดเมน>
กับชื่อผู้ใช้และใช้งานได้ในแอป C # ฉันกำลังแก้ไขข้อบกพร่อง แต่การเรียกใช้คำสั่งเดียวกันใน PowerShell ยังคงส่งคืนค่าเท็จ แม้ว่าตอนนี้ฉันจะได้รับ KDC_ERR_PREAUTH_FAILED
ในตัวแสดงเหตุการณ์