我试图连接到的eDirectory 8.8服务器上运行LDAP。 我怎么会去这样做在.net中? 我仍然可以使用在System.DirectoryService类等的DirectoryEntry和的DirectorySearcher或者他们AD具体点吗? 我需要指定“连接字符串”有什么不同?
我想类似下面的代码,但它似乎没有工作...
DirectoryEntry de = new DirectoryEntry ("LDAP://novellBox.sample.com","admin","password",AuthenticationTypes.None);
DirectorySearcher ds = new DirectorySearcher(de);
var test = ds.FindAll();
有任何想法吗?
嗯,我觉得你的连接字符串缺少位 - 仅指定的服务器名称是不够的 - 你还需要指定用于搜寻的“起点”。
在AD中,这通常是这样在你的域名,其中你会指定像这样的LDAP说法“用户”容器:
LDAP://novellBox.sample.com/cn=Users,dc=YourCompany,dc=com
不知道怎么LDAP兼容的eDirectory的新版本 - 但因为在理论上,应该工作,它是标准的LDAP不管执行的:-)
不过话又说回来:只在理论上存在的理论与实践之间没有什么区别.....
还有一个System.DirectoryServices.Protocols
命名它提供低级别的LDAP直接调用-这绝对不是绑的广告,但它确实相当底层的.....
还有一个Novell的C#LDAP库 ,但我从来没有尝试过,并不能说是多么完整的或能。 它可能给你一些线索,但!
也看到这个其他#1问题有关Novell,LDAP和C# -它可能给你额外的信息。
我有一个很难搞清楚了这一点,但你可以使用类似下面,它为我工作甜:
Domain domain = Domain.GetDomain(new DirectoryContext(DirectoryContextType.Domain, "novellBox.sample.com");
DirectorySearcher ds = new DirectorySearcher(domain.GetDirectoryEntry(), searchQuery);
using (SearchResultCollection src = ds.FindAll())
{....}
我认为你需要使用LDAP语法的主机。
确保你不要忘了与释放连接using
-如果你直到池耗尽了,你的应用程式的空档不处理他们挂目录中的条目撒手人寰。
using (DirectoryEntry de = new DirectoryEntry ("LDAP://CN=server,DC=domain,DC=com","admin","password",AuthenticationTypes.Secure))
{
...
}
根据ONT他的目录服务器的配置,你实际上可能需要使用System.DirectoryServices.Protocols命名空间。 我写了一张贴在连接到OpenLDAP的吧。
http://mikemstech.blogspot.com/2013/03/searching-non-microsoft-ldap.html
如果外部LDAP需要与DN认证试试这个:首先检索用户的DN,然后尝试用DN和用户证书进行认证。 我测试过它的Domino LDAP。
// Autheticate in external LDAP
string ldapserver = "10.1.1.1:389";
string ldapbasedn = "o=mycompany";
string ldapuser = "cn=Administrator,o=mycompany";
string ldappassword = "adminpassword";
string ldapfilter = "(&(objectclass=person)(cn={0}))";
string user = "usertest";
string password = "userpassword";
try
{
string DN = "";
using (DirectoryEntry entry = new DirectoryEntry("LDAP://" + ldapserver + "/" + ldapbasedn, ldapuser, ldappassword, AuthenticationTypes.None))
{
DirectorySearcher ds = new DirectorySearcher(entry);
ds.SearchScope = SearchScope.Subtree;
ds.Filter = string.Format(ldapfilter, user);
SearchResult result = ds.FindOne();
if (result != null )
{
DN = result.Path.Replace("LDAP://" + ldapserver + "/" , "");
}
}
// try logon
using (DirectoryEntry entry = new DirectoryEntry("LDAP://" + ldapserver + "/" + ldapbasedn, DN, password, AuthenticationTypes.None))
{
DirectorySearcher ds = new DirectorySearcher(entry);
ds.SearchScope = SearchScope.Subtree;
SearchResult result = ds.FindOne();
}
} catch (Exception) { }
我试图连接到的eDirectory 8.8服务器上运行LDAP。 我怎么会去这样做在.net中? 我仍然可以使用在System.DirectoryService类等的DirectoryEntry和的DirectorySearcher或者他们AD具体点吗?
我们正在使用的System.DirectoryServices Microsoft Active Directory的,OpenLDAP的Linux和eDirectiry运行没有任何问题。 因此,答案是肯定的,你可以使用这些类来访问EDIR。
我需要指定“连接字符串”有什么不同?
是的,你是。 当传递到DirectoryEntry的开始字符串“LDAP://”,你需要符合LDAP语法比URI语法有很大不同。
我建议你为了得到正确的路径根对象,否则你会花时间试图找出正确的对象类型使用LDAP浏览器(谷歌,也有很多免费下载)。