Использование `System.DirectoryServices` в Ubuntu для аутентификации в Windows Active Directory

Я разработал C# приложение, использующее monodevelop, которое в основном выполняет аутентификацию ldap с помощью активного каталога Windows. Он отлично работает в Windows, но если я использую тот же код в Ubuntu вместо аутентификации в активной директории Windows, я думаю, что он пытается аутентифицироваться в активной директории novell. Это не с novell.ldap.exception поговорка invalid credentials,

Я удалил все ссылки на novell.directory.ldap, но system.directoryServices внутренне ссылается на сборку novell. Мое требование состоит в том, чтобы использовать один и тот же набор сборок.net System.DirectoryServices как в Windows, так и в Linux, и проходить аутентификацию в Windows Active Directory.

Есть ли способ добиться этого с помощью C# monodevelop?

Это фрагмент кода, всегда терпящий неудачу в Ubuntu в Findall с недействительными учетными данными. потому что он всегда указывает на активный каталог novell

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 Active Directory, это просто вопрос определения правильного URL-адреса Windows Active Directory.

Я просто добавил ссылку на сборку 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 );
Другие вопросы по тегам