我使用 monodevelop 开发了一个C#
应用程序,它基本上使用 Windows Active Directory 进行 ldap 身份验证。它在 Windows 中运行良好,但如果我在 Ubuntu 中使用相同的代码而不是对 Windows Active Directory 进行身份验证,我认为它正在尝试使用 Novell Active Directory 进行身份验证。它失败并novell.ldap.exception
显示invalid credentials
。
我已删除所有对 的引用novell.directory.ldap
,但 system.directoryServices 在内部引用的是 novell 程序集。我的要求是在 Windows 和 Linux 中使用同一套 .net 程序集 System.DirectoryServices,并使用 Windows Active Directory 进行身份验证。
有什么方法可以使用 C# monodevelop 实现这一点吗?
这是一段在 ubuntu 中总是因无效凭证而失败的代码。因为它总是指向 novell active directory
string strLdapURL = "LDAP://" + Domain + ":389";
DirectoryEntry entry = new DirectoryEntry(strLdapURL, strUserName, Password);
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = "(&(ObjectCategory=computer)(!userAccountControl:1.2.840.113556.1.4.803:=2)(operatingSystem=*server*))";
mySearcher.PropertiesToLoad.Add("PwdLastSet");
mySearcher.SizeLimit = int.MaxValue;
mySearcher.PageSize = int.MaxValue;
mySearcher.Tombstone = false;
mySearcher.SearchScope = System.DirectoryServices.SearchScope.Subtree;
System.DirectoryServices.SearchResultCollection entry1 = mySearcher.FindAll();
答案1
我自己修好了
我错误地认为 novell.directory.ldap 指向 novell 的活动目录结构。这也适用于 windows 活动目录,只需指定正确的 windows 活动目录 URL 即可。
我刚刚添加了对 novell.directory.ldap 程序集的引用,然后在凭据中将用户名管理员更改为管理员(区分大小写)。
之前我在绑定操作中只是使用用户名;在那里我还附加了域名,如域\管理员。我能够让它工作。
string strDomain = "domain";
string strUserName = "Administrator";
string Password = "Password123";
String loginDN = strDomain + "\\" + strUserName;
int LdapVersion = LdapConnection.Ldap_V3;;
String ldapHost = domain;
string strLdapURL = "LDAP://" + Domain + ":389";
LdapConnection lc = new LdapConnection();
lc.Connect( ldapHost, LdapPort );
lc.Bind( LdapVersion, loginDN, password );