วิธีที่เหมาะสมในการรับคุณลักษณะผู้ใช้เฉพาะจาก Active Directory ผ่าน LDAP C API คืออะไร

ฉันกำลังพยายามรับคุณลักษณะผู้ใช้บางอย่างจาก Active Directory โดยใช้ Windows LDAP API ฉันใช้:

  • เวอร์ชัน Active Directory: เวอร์ชันที่มาพร้อมกับ Windows Server 2012
  • เวอร์ชัน LDAP: 3
  • เวอร์ชัน Wldap32.lib: เวอร์ชันที่มาพร้อมกับ Windows 10 x64

Eg:

PCHAR myAttributes[4];

myAttributes[0] = "DistinguishedName";
myAttributes[1] = "DisplayName";
myAttributes[2] = "PasswordExpired";
myAttributes[3] = "mail";

ldap_search_s(
    myLdapConnection,   // Ldap connection
    myDomain,           // DN to start search
    LDAP_SCOPE_SUBTREE, // Scope
    myFilter,           // Filter
    myAttributes,       // Retrieve list of attributes
    0,                  // Get both attributes and values
    &mySearchResult     // [out] Search results
); 

ส่งคืนแอตทริบิวต์ DistinguishedName, DisplayName และ mail แต่จะไม่ส่งคืนแอตทริบิวต์ PasswordExpired

ฉันสอบถามด้วยแอตทริบิวต์อื่นๆ และดูเหมือนว่าจะไม่ส่งคืนแอตทริบิวต์ที่มีค่าบูลีนเช่นเดียวกับแอตทริบิวต์ EmailAddress

  1. เหตุใดจึงไม่ส่งคืนแอตทริบิวต์ PasswordExpired
  2. แล้ว EmailAddress ล่ะ?
  3. มีความแตกต่างระหว่าง EmailAddress และ mail หรือไม่?

person MiJo    schedule 21.05.2016    source แหล่งที่มา


คำตอบ (1)


  1. ไม่มีแอตทริบิวต์ PasswordExpired LDAP ใน Active Directory หากต้องการสร้างแบบสอบถามของคุณให้ดูที่ URL นี้สำหรับชื่อแอตทริบิวต์ใน Active Directory schema มาตรฐาน https://msdn.microsoft.com/en-us/library/ms675090(v=vs.85).aspx หากต้องการตรวจสอบว่ารหัสผ่านสำหรับบัญชีที่กำหนดหมดอายุหรือไม่ คุณจะต้องตรวจสอบแอตทริบิวต์ userAccountControl ซึ่งจริงๆ แล้วคือค่าสถานะการจัดเก็บสถานะที่แตกต่างกันของบัญชีผู้ใช้ https://msdn.microsoft.com/en-us/library/ms680832(v=vs.85).aspx มีอินเทอร์เฟซ IADsUser ที่จะแปลทั้งหมดนี้ให้คุณในกรณีที่คุณไม่จำเป็นต้องยึดติดกับ LDAP https://msdn.microsoft.com/en-us/library/aa746343(v=vs.85).aspx

  2. คุณจะพบที่อยู่อีเมลหลักปัจจุบันในแอตทริบิวต์จดหมาย ไม่มีแอตทริบิวต์ EmailAddress LDAP เว้นแต่คุณจะหมายถึงที่อยู่อีเมลซึ่งเป็น CN สำหรับแอตทริบิวต์สคีมาเดียวกันกับเมล ดังนั้นจึงไม่มีความแตกต่างกัน

  3. ดูด้านบน. โดยทั่วไป หากคุณไม่มีเหตุผลที่น่าสนใจที่จะยึดถือเพียง C/LDAP ฉันขอแนะนำให้คุณใช้ .Net Framework แทน มิฉะนั้น คุณจะมีงานอีกมากรออยู่ข้างหน้า ไม่ใช่แค่การตีความบิตแฟล็ก เช่น ในกรณีที่รหัสผ่านหมดอายุ แต่อาจรวมถึงวิธีการตรวจสอบสิทธิ์ที่แตกต่างกัน โครงสร้างที่แตกต่างกันที่จับเวลาและวันที่ การบัญชีสำหรับเขตเวลา UTF การไล่ตามการอ้างอิง และสิ่งอื่น ๆ ที่คุณอาจ ความต้องการขึ้นอยู่กับความซับซ้อนของสิ่งที่คุณต้องการบรรลุ คุณจะทำงานได้เร็วขึ้นมากใน .Net Framework ดู DirectoryServices https://msdn.microsoft.com/en-us/library/mt481534(v=vs.110).aspx เนมสเปซหรือเนมสเปซความปลอดภัย https://msdn.microsoft.com/en-us/library/mt481561(v=vs.110).aspx เพื่อดูรายละเอียด

person Martin Lhotsky    schedule 23.05.2016