Приветствую всех читателей! В этой статье мы рассмотрим вопрос аутентификации через LDAP с вводом доменного имени и ID в формате mydomain.com\userid в Delphi.
Для начала давайте разберемся, что такое LDAP и Active Directory. LDAP (Lightweight Directory Access Protocol) - это протокол доступа к каталогам, который используется для поиска и извлечения информации из каталогов. Active Directory (AD) - это служба каталогов, разработанная корпорацией Microsoft, которая использует LDAP для доступа к каталогам.
Теперь давайте рассмотрим код, который был предоставлен в вопросе:
uses
adshlp, ActiveDs_TLB
function Tlogon_form.GetUser(Domain, UserName, pword: string; var ADSIUser: TADSIUserInfo): boolean;
var
usr : IAdsUser;
usr1 : IADs;
flags : integer;
grps : IAdsMembers;
grp : IAdsGroup;
varGroup : OleVariant;
Temp : LongWord;
pwd, cn_name, FQDN, AD_path: string;
HR : boolean;
fad_domain:string;
objsysinfo: IADsADSystemInfo;
domainDN: string;
List: array [0..10] of String;
I: integer;
name_nodes :string;
const
ADS_SECURE_AUTHENTICATION = $00000001;
begin
ADSIUser.UID:='';
ADSIUser.UserName:='';
ADSIUser.DB_login :='';
ADSIUser.Disabled:=true;
ADSIUser.LockedOut:=true;
ADSIUser.Groups:='';
Result:=false;
FQDN :='';
AD_path := '';
SBN_SQL.Common_login :='';
FPassword := pword;
FUserName := UserName;
//FDomain := lowercase(Domain); // + '.local';
if FUserName = '' then exit;
objsysinfo := CoADSystemInfo.Create;
domainDN := objsysinfo.GetAnyDCName;
fad_domain := objsysinfo.DomainDNSName;
name_nodes := objsysinfo.UserName;
if domain > '' then
begin
fad_domain := domain;
end
else
begin
domain := fad_domain;
end;
fad_domain := fad_domain + '.';
FQDN := domainDN;
ad_path := name_nodes;
try
if trim(FUserName)<>'' then
begin
ADsOpenObject('LDAP://' + AD_path, FUserName, FPassword,ADS_SECURE_AUTHENTICATION, IADsUser, usr);
end;
if usr=nil then exit;
ADSIUser.UID:= UserName;
ADSIUser.UserName := usr.FullName;
ADSIUser.DB_login := usr.employeeid;
//usr:=nil;
Result:=true;
exit;
except
on e: exception do begin
Result:=false;
exit;
end;
end;
end;
В этом коде мы видим, что автор пытается получить информацию об пользователе из Active Directory, используя ввод доменного имени и ID в формате mydomain.com\userid. Однако, автор столкнулся с проблемой, что не может найти LDAP вызов, который бы позволил ему аутентифицировать пользователя и получить необходимые данные.
Подтвержденный ответ:
Для решения этой проблемы автор может использовать компонент TADSISearcher, который был разработан для поиска пользователей в Active Directory с помощью LDAP. Компонент можно скачать с сайта adsi.mvps.org.
Автор может использовать компонент следующим образом:
В этом коде мы создаем экземпляр компонента TADSISearcher и настраиваем его для поиска пользователя с заданным ID в Active Directory. Мы устанавливаем корень поиска, фильтр поиска, атрибуты поиска, Scope поиска, TimeLimit поиска, SizeLimit поиска и Subtree поиска. Затем мы вызываем метод Execute для выполнения поиска. Если поиск проходит успешно, мы получаем необходимые данные пользователя и возвращаем их в виде TADSIUserInfo.
Альтернативный ответ:
Автор также может использовать функцию ADsOpenObject для аутентификации пользователя и получения необходимых данных. Для этого автор может передать доменное имя и ID пользователя в виде строки в формате mydomain.com\userid в качестве первого параметра функции ADsOpenObject. Например:
Аутентификация через LDAP с вводом доменного имени и ID пользователя в формате mydomain.com\\userid в Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.