我正在研究构建Active Directory搜索工具所需的内容,该工具最终将用于C#ASP.NET Web应用程序。
我对AD知之甚少(并且特别想要了解更多信息)所以我已经要求我们的技术人员在服务器上设置虚拟实例。他们已经完成了域名 dummy.local
我现在需要弄清楚我的LDAP连接字符串。在这里,我完全陷入困境。我使用的是Domain Admins成员的用户帐户。在网络上狩猎之后,我尝试了各种各样的东西来计算出LDAP连接字符串的各种组件。例如,如果我在cmd.exe中为服务器上的该域管理员用户运行以下内容...
dsquery user -samid "username" | dsget user -memberof -expand
...这给了我以下信息:
"CN=Domain Admins,CN=Users,DC=dummy,DC=local"
"CN=Remote Desktop Users,CN=Builtin,DC=dummy,DC=local"
"CN=Users,CN=Builtin,DC=dummy,DC=local"
"CN=Administrators,CN=Builtin,DC=dummy,DC=local"
"CN=Domain Users,CN=Users,DC=dummy,DC=local"
"CN=Denied RODC Password Replication Group,CN=Users,DC=dummy,DC=local"
我还在C#控制台应用程序中运行以下内容......
using (var context = new PrincipalContext(ContextType.Domain))
using (var comp = ComputerPrincipal.FindByIdentity(context, Environment.MachineName))
{
Console.WriteLine(String.Join(",", comp.DistinguishedName.Split(',').SkipWhile(s => !s.StartsWith("OU=")).ToArray()));
}
......这给了我以下内容:
OU=Domain Controllers,DC=dummy,DC=local
我认为因此我拥有构建LDAP连接字符串所需的所有属性。我最终得到了这个:
LDAP://COMSECWEBDEV.dummy.local/ou=Domain Controllers,/cn=Domain Admins,/cn=Users,/dc=dummy,/dc=local
我已尝试使用此连接字符串,我知道域管理员的用户名和密码是正确的,但我尝试的所有内容总是给我同样的错误:
System.Runtime.InteropServices.COMException (0x80005000): Unknown error (0x80005000)
at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.get_AdsObject()
at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne)
at System.DirectoryServices.DirectorySearcher.FindOne()
由于这个错误没有给我任何细节,我不知道我做错了什么。我确定我没有正确连接字符串,但我不知道如何计算出正确的字符串。
为了完整起见,这是我正在测试的控制台代码:
static void Main(string[] args)
{
var connString = ConfigurationSettings.AppSettings["lc"];
var username = ConfigurationSettings.AppSettings["lu"];
var password = ConfigurationSettings.AppSettings["lpw"];
using (DirectoryEntry de = new DirectoryEntry(connString, username, password))
{
DirectorySearcher search = new DirectorySearcher(de);
search.PageSize = 1001;// To Pull up more than 100 records.
DirectorySearcher directorySearcher = new DirectorySearcher(de);
directorySearcher.Filter = string.Format("(&(objectClass=user)(objectCategory=user) (sAMAccountName={0}))", username);
directorySearcher.PropertiesToLoad.Add("msRTCSIP-PrimaryUserAddress");
try
{
var result = directorySearcher.FindOne();
var found = false;
if (result != null)
{
if (result.Properties["msRTCSIP-PrimaryUserAddress"] != null)
{
found = true;
Console.WriteLine("Found: " + result.Properties["msRTCSIP-PrimaryUserAddress"][0]);
}
}
if (!found)
{
Console.WriteLine("Sad face");
}
}
catch (Exception x)
{
Console.WriteLine(x.Message);
}
Console.WriteLine("------------");
}
}
答案 0 :(得分:1)
上周我试图弄清楚如何正确格式化LDAP连接字符串,并在serverfault上找到了这个条目:
How can I figure out my LDAP connection string?
我注意到你在每个OU或DC条目之间都有一个“/” - 我没有包括我的那些,我也没有在上面的例子中看到它们。
我远非专家(显然),但我只想把它扔到那里。