LDAP路径问题
本文关键字:问题 路径 LDAP | 更新日期: 2023-09-27 18:11:19
我正在使用LDAP,我是新手。
当您只知道用户名,密码,服务器名时,是否有办法获得域名
我正在尝试做这个:
string ldapPath = "LDAP://serverName";
string uid = username;
string password = pwd;
string qry = String.Format("(uid={0})", uid);
string adsPath = String.Empty;
try
{
DirectoryEntry nRoot = new DirectoryEntry(ldapPath, null, null, AuthenticationTypes.Anonymous);
DirectorySearcher ds = new DirectorySearcher(nRoot, qry);
SearchResult sr = ds.FindOne();
if (sr != null)
{
// we want to retrieve the DN like this: "uid=myuser,ou=People,dc=findlay,dc=edu
ldapPath = sr.Path; //update where we will bind next
}
除非我更改
,否则无法工作。 string ldapPath = "LDAP://serverName";
string ldapPath = "LDAP://serverName/DC=mydomain,DC=com";
任何帮助…? ?
感谢编辑rootDSEstring defaultNamingContext;
using (DirectoryEntry rootDSE = new DirectoryEntry("LDAP://serverName/rootDSE", null, null, AuthenticationTypes.Anonymous))
{
defaultNamingContext = rootDSE.Properties["rootDomainNamingContext"].Value.ToString();
}
我也觉得这是解决方案,但它目前不适合我…请帮助!
RootDSE
不是服务器绑定-试试这个:
string defaultNamingContext;
using (DirectoryEntry rootDSE = new DirectoryEntry("LDAP://rootDSE", null, null, AuthenticationTypes.Anonymous))
{
defaultNamingContext = rootDSE.Properties["defaultNamingContext"].Value.ToString();
}
或者如果你使用。net 3.5及更新版本,你可以使用PrincipalContext
代替,它可以在没有任何路径的情况下构建-它只会选择你连接到的默认域:
PrincipalContext context = new PrincipalContext(ContextType.Domain);
您应该检查System.DirectoryServices.AccountManagement
(S.DS.AM)命名空间。在这里阅读所有相关内容(即。net 3.5及更新版本):
- 管理。net Framework 3.5中的目录安全主体
- System.DirectoryServices.AccountManagement上的MSDN文档
如果:
using (DirectoryEntry rootDSE = new DirectoryEntry("LDAP://serverName/DC=mydomain,DC=com")
{
...
}
工作,你试过吗(不匿名):
string defaultNamingContext;
using (DirectoryEntry rootDSE = new DirectoryEntry("LDAP://serverName/rootDSE")
{
defaultNamingContext = rootDSE.Properties["rootDomainNamingContext"].Value.ToString();
}
或
using (DirectoryEntry rootDSE = new DirectoryEntry("LDAP://serverName/rootDSE", user, password)
{
defaultNamingContext = rootDSE.Properties["rootDomainNamingContext"].Value.ToString();
}
可以在非域名的电脑上运行
你可以这样试试
//方法调用
string netBiosName = GetNetBiosName(LDAP://CN=Partitions,CN=Configuration,DC=<DomainName>,DC=<local|com>, "<userName"", "<password>");
//方法调用
//方法定义
private string GetNetBiosName(string ldapUrl, string userName, string password)
{
string netbiosName = string.Empty;
DirectoryEntry dirEntry = new DirectoryEntry(ldapUrl,userName, password);
DirectorySearcher searcher = new DirectorySearcher(dirEntry);
searcher.Filter = "netbiosname=*";
searcher.PropertiesToLoad.Add("cn");
SearchResultCollection results = searcher.FindAll();
if (results.Count > 0)
{
ResultPropertyValueCollection rpvc = results[0].Properties["CN"];
netbiosName = rpvc[0].ToString();
}
return netbiosName;
}
请查看此链接获取更多信息
您应该能够通过调用RootDse获得域。