在 Ubuntu 上使用 `System.DirectoryServices` 进行 Windows Active Directory 身份验证

在 Ubuntu 上使用 `System.DirectoryServices` 进行 Windows Active Directory 身份验证

我使用 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 );

相关内容