UserPrincipal
एक विधि GetUnderlyingObject()
जो DirectoryEntry
वापस आ जाएगी है।
प्राप्त करें DirectoryEntry प्रधानाचार्य की ओर से:
private DirectoryEntry GetDirectoryEntryFromUserPrincipal(Principal user)
{
return (DirectoryEntry)user.GetUnderlyingObject();
}
प्राप्त डोमेन से DirectoryEntry और खाता नाम:
private DirectoryEntry GetDirectoryEntryFromDomainAndUsername(string domainName, string userName)
{
// Get the sid from the NT account name
var sid = (SecurityIdentifier) new NTAccount(domainName, accountName)
.Translate(typeof(SecurityIdentifier));
// Get the directory entry for the LDAP service account
var serviceEntry = new DirectoryEntry("LDAP://{address}", "serviceUsername", "servicePassword");
var mySearcher = new DirectorySearcher(serviceEntry)
{
Filter = string.Format("(&(ObjectSid={0}))", sid.Value)
};
return mySearcher.FindOne().GetDirectoryEntry();
}
एक बार जब आप DirectoryEntry
Guid
संपत्ति का उपयोग प्राप्त करने के लिए प्रवेश के Object-Guid
private Guid GetObjectGuidFromDirectoryEntry(DirectoryEntry entry)
{
// return the Guid this is the Object-Guid (ignore NativeGuid)
return entry.Guid;
}
किसी निर्देशिका खाते के विरुद्ध एप्लिकेशन में उपयोगकर्ता खाते को ट्रैक करने के लिए: हमेशा ऑब्जेक्ट-गुइड का उपयोग करें "यह मान सेट किया गया है जब ऑब्जेक्ट बनाया गया है और बदला नहीं जा सकता है।"
यदि उपयोगकर्ता डोमेन बदलता है या अधिक सामान्य रूप से अपना नाम बदलता है (शादी, कानूनी नाम-परिवर्तन इत्यादि) और उपयोगकर्ता को ट्रैक करने के लिए उपयोग नहीं किया जाना चाहिए, तो एनटी और एसएएम खाता नाम बदल सकते हैं।
NT खाता नाम प्राप्त करने के लिए (डोमेन \ उपयोगकर्ता नाम):
private string GetNTAccountNameFromDirectoryEntry(DirectoryEntry entry)
{
PropertyValueCollection propertyValueCollection = entry.Properties["objectsid"];
SecurityIdentifier sid = new SecurityIdentifier((byte[]) propertyValueCollection[0], 0);
NTAccount ntAccount = (NTAccount)sid.Translate(typeof (NTAccount));
return account.ToString();
}
सैम-खाता-नाम (उपयोगकर्ता नाम @ डोमेन) प्राप्त करने के लिए:
private string GetSAMAccountFromDirectoryEntry(DirectoryEntry entry)
{
return entry.Properties["Name"].Value;
}
और यहाँ है सभी सक्रिय निर्देशिका विशेषताओं के exhaustive list। Properties
से मान प्राप्त करते समय "Ldap-Display-Name" का उपयोग करें उदा। Properties["Ldap-Display-Name"]
Display-Name (फर्स्टनाम एमआई लास्टनाम) काम में आ सकता है।
मैंने इसे सत्यापित नहीं किया है, इसलिए मुझे 100% निश्चित नहीं है, लेकिन मुझे लगता है कि आप 'SamAccountName' संपत्ति चाहते हैं। – CodingGorilla
क्या आपको लगता है, यह संभव है? मुझे संदेह है कि उपयोगकर्ता प्रदर्शन नाम अद्वितीय हैं। संभवतः मल्टीपे परिणाम का नेतृत्व करेंगे। –
सच है। अब मैं नीचे दिए गए उत्तर का उपयोग करके GUID का उपयोग करने पर विचार करता हूं। –