通过LDAP连接到Active Directory
本文关键字:Active Directory 连接 LDAP 通过 | 更新日期: 2023-09-27 17:58:44
我想用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
等等是什么意思?
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
属性允许您深入了解您的领域。因此,如果你想在特定的组织单位中搜索用户,你可以在那里设置它。
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com");
directoryEntry.Path = "LDAP://OU=Specific Users,OU=All Users,OU=Users,DC=example,DC=com";
这将匹配以下AD层次结构:
- com
- 示例
- 用户
- 所有用户
- 特定用户
- 所有用户
- 用户
- 示例
简单地写出从最深到最高的层次结构。
现在你可以做很多事情
例如,按帐户名搜索用户并获取用户的姓氏:
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();
}
ldapConnection是服务器地址:ldap.example.comLdap.ConnectionPath是ADS内部的路径,您希望使用Ldap格式插入。
OU=Your_OU,OU=other_OU,dc=example,dc=com
从最深的OU开始,返回AD的根,然后为每个域部分添加dc=X,直到您拥有包括顶级域在内的所有内容
现在我错过了一个要验证的参数,这与用户名的路径相同
CN=用户名,OU=用户,DC=示例,DC=com
LDAP 简介
如果您的电子邮件地址为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 + ")";
....