LDAP с ядром dotnet под Linux - PullRequest
       1

LDAP с ядром dotnet под Linux

0 голосов
/ 22 февраля 2019

Я разрабатываю приложение на основе ядра .net (2.2.103), которое должно подключаться к серверу LDAP.На моей машине под управлением Windows я использовал для этого пространство имен System.DirectoryServices.Тем не менее, приложение должно будет работать в Linux (Ubuntu), и я получил PlatformNotSupportedException, поэтому я добавил ссылку на <PackageReference Include="Novell.Directory.Ldap" Version="2.2.1" /> и использовал ее.

К сожалению, это бросает еще один PlatformNotSupportedException (ноиз-за прерывания потока) при удалении соединения:

Unhandled Exception: System.PlatformNotSupportedException: Thread abort is not supported on this platform.
   at System.Threading.Thread.Abort()
   at Novell.Directory.Ldap.Connection.Dispose(Boolean disposing, String reason, Int32 semaphoreId, InterThreadException notifyUser)
   at Novell.Directory.Ldap.Connection.destroyClone(Boolean apiCall)
   at Novell.Directory.Ldap.LdapConnection.Finalize()

Существует ли надежная реализация LDAP для ядра dotnet в Linux?

1 Ответ

0 голосов
/ 22 февраля 2019

Пакет, который вы пытались использовать, последний раз обновлялся в 2014 году. Он не соответствует ни .NET Core, ни .NET Standard.

Вместо этого вы можете попробовать Novell.Directory.Ldap.NETStandard .Несмотря на название, это не библиотека Novell.В NuGet есть и другие библиотеки LDAP, но это, кажется, самая популярная программа, которая все еще активно развивается.

Исключение предполагает, что вы также забыли избавиться от соединения.Finalize вызывается только сборщиком мусора.

Этот ответ показывает, как использовать Novell.Directory.Ldap.NETStandard для аутентификации пользователя:

public bool ValidateUser(string domainName, string username, string password)
{
   string userDn = $"{username}@{domainName}";
   try
   {
      using (var connection = new LdapConnection {SecureSocketLayer = false})
      {
         connection.Connect(domainName, LdapConnection.DEFAULT_PORT);
         connection.Bind(userDn, password);
         if (connection.Bound)
            return true;
      }
   }
   catch (LdapException ex)
   {
      // Log exception
   }
   return false;
}

Соединение создается внутри блока using, что гарантирует его удаление, как только выполнение выходит из области действия блока

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...