AD аутентификация с использованием Unicode - PullRequest
2 голосов
/ 12 октября 2011

Только что реализована аутентификация AD в C # с использованием:

DirectoryEntry entry = 
  new DirectoryEntry(_path, domainAndUsername, pwd, AuthenticationTypes.Secure);

где _path - LDAP:// + полное доменное имя (например, ip контроллера домена).

Теперь я должен сделать то же самое, используя Delphi. Итак, я нашел отличную реализацию Соломона в Delphi 2007 LDAP на http://www.freemeg.com/index.php/projects/projects-2/15-delphi-ldap-authentication-component

  1. У кого-нибудь есть рабочая версия для Delphi 2009+ (юникод)?
  2. Есть ли у кого-нибудь рабочий образец с простой обработкой аутентификации AD (например, проверка), домен \ идентификатор пользователя и пароль?

В C # приятно то, что мне не нужно проходить через AD - я просто выполняю одноуровневый поиск по LDAP - просто чтобы проверить, аутентифицирован ли пользователь.

1 Ответ

1 голос
/ 10 ноября 2011

Тони Кадуто предоставил мне решение Synapse:

Я вырезал этот материал из объекта аутентификации, который я создал, я не хочу публиковать все это, так как есть множество других не связанныхвсе в этом есть.

Это должно помочь вам, ключ состоит в том, чтобы объединить имя пользователя AD с '@ your.ad.domain.name'. После успешного связывания вы можете выполнить поиск в каталоге AD с помощьюпоставка базового DN и использование функции поиска модуля ldapsend.

Я обнаружил, что это быстрее, чем другие методы, и это надежно.Вам нужно получить транковую версию синапса, чтобы он работал с более поздними версиями delphi.

uses ldapsend

var
    fldap:tldapsend;
    fad_domain,ausername,apassword:string;
begin
ausername:='your AD username';
apassword:='your AD password';
fldap := TLDAPSend.Create;
fad_domain:= 'your.ad.domain';
fldap.TargetHost:=fad_domain;
//next line is the key to getting AD authentication working
fldap.UserName := ausername+'@'+fad_domain;
fldap.Password := apassword;
try
   try
      if fldap.Login then
         if fldap.Bind then
            begin
                    //user is succesfully authenticated at this point

            end else
                raise exception.Create('LDAP bind failed.');
   except
         on e:exception do
            //whatever
   end;
finally
       fldap.logout;
       freeandnil(fldap);
end;
end;

Спасибо Тони !!!!

...