我想用C#连接到我们的本地Active Directory。
但我真的不知道如何通过LDAP连接。
有人可以解释如何使用询问的参数吗?
示例代码:
static DirectoryEntry createDirectoryEntry()
{
// create and return new LDAP connection with desired settings
DirectoryEntry ldapConnection = new DirectoryEntry("rizzo.leeds-art.ac.uk");
ldapConnection.Path = "LDAP://OU=staffusers,DC=leeds-art,DC=ac,DC=uk";
ldapConnection.AuthenticationType = AuthenticationTypes.Secure;
return ldapConnection;
}
我只拥有Active Directory服务器的主机名和IP地址。 DC=xxx,DC=xx
等等是什么意思?
答案 0 :(得分:78)
DC是您的域名。如果你想连接到域example.com而不是你的dc:DC = example,DC = com
您实际上不需要域控制器的任何主机名或IP地址(可能有很多)。
想象一下,您正在连接到域本身。因此,要连接到域example.com,您只需编写
即可DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com");
你已经完成了。
您还可以指定用于连接的用户和密码:
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com", "username", "password");
还要确保始终以大写形式编写LDAP。我遇到了一些麻烦和奇怪的异常,直到我读到某个地方我应该尝试用大写字母写它并解决了我的问题。
directoryEntry.Path
属性可让您深入了解您的域名。因此,如果要搜索特定OU(组织单位)中的用户,可以在那里进行设置。
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com");
directoryEntry.Path = "LDAP://OU=Specific Users,OU=All Users,OU=Users,DC=example,DC=com";
这将匹配以下AD层次结构:
只需将层次结构从最深层写入最高层。
Now you can do plenty of things
例如,按帐户名搜索用户并获取用户的姓氏:
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com");
DirectorySearcher searcher = new DirectorySearcher(directoryEntry) {
PageSize = int.MaxValue,
Filter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=AnAccountName))"
};
searcher.PropertiesToLoad.Add("sn");
var result = searcher.FindOne();
if (result == null) {
return; // Or whatever you need to do in this case
}
string surname;
if (result.Properties.Contains("sn")) {
surname = result.Properties["sn"][0].ToString();
}
答案 1 :(得分:2)
ldapConnection是服务器地址:ldap.example.com Ldap.Connection.Path是ADS中您希望以LDAP格式使用insert的路径。
OU = Your_OU,OU = other_ou,DC =例如,DC = COM
您从最深的OU开始,回到AD的根目录,然后为每个域部分添加dc = X,直到您拥有包括顶级域的所有内容
现在我想念一个要进行身份验证的参数,这与用户名
的路径相同CN =用户名,OU =用户,DC =例如,DC = COM
答案 2 :(得分:1)
如果您的电子邮件地址是&m; myname@mydomain.com',请尝试更改createDirectoryEntry(),如下所示。
如果XYZ存在于mydomain目录
中,则它是一个可选参数static DirectoryEntry createDirectoryEntry()
{
// create and return new LDAP connection with desired settings
DirectoryEntry ldapConnection = new DirectoryEntry("myname.mydomain.com");
ldapConnection.Path = "LDAP://OU=Users, OU=XYZ,DC=mydomain,DC=com";
ldapConnection.AuthenticationType = AuthenticationTypes.Secure;
return ldapConnection;
}
这基本上会检查com - > mydomain - > XYZ - >用户 - > ABCD
主要功能如下:
try
{
username = "Firstname LastName"
DirectoryEntry myLdapConnection = createDirectoryEntry();
DirectorySearcher search = new DirectorySearcher(myLdapConnection);
search.Filter = "(cn=" + username + ")";
....