Integrace s Active Directory
Protože se řada z vás může setkat s podobným problémem, dovolili jsme si s laskavým souhlasem publikovat překlad článku Ing. Karla Janečka, MBA, MSc. publikovaný na serveru torry.net.
Alternativa k již nepodporovaného balíčku komponent CData pro Active Directory
Propojení vašeho informačního systému s Active Directory je očekávanou a výhodnou volbou pro mnoho podnikových řešení napsaných v Delphi. Upřímně řečeno, můžeme použít několik přístupů, jak toho dosáhnout – nicméně časově úsporné a efektivní řešení bude pravděpodobně tou nejlepší cestou.
Až do verze 11 existovalo řešení vhodné pro všechny vývojáře Delphi/C++Builderu – balíček komponent CData. Jedná se o velmi rozsáhlou sadu komponent, kterou můžete připojit k téměř všem myslitelným a populárním službám, jako jsou sociální média, online nakupování, poskytovatelé e-mailů, meteorologické služby a mnoho dalších. Tyto komponenty jsou založeny na snadném přístupu, kdy komunikace s danou službou probíhá podobně jako u FireDac s využitím jazyka SQL, takže můžete použít všechny známé a tradiční metody datových sad/zdrojů.
Pro úplnost je třeba zmínit „cenovku“ balíčku CData. Upřímně řečeno, balíček Enterprise+ (obsahuje desítky dalších komponent pro přístup k mnoha populárním službám, včetně Active Directory) stojí kolem 2000 USD. Na jednu stranu je hodnota, kterou získáte, skvělá – na druhou stranu je cena prostě přemrštěná, zejména pro malé vývojáře (jednotlivce, živnostníky).
Cena je ve skutečnosti jen jedním ze zádrhelů. Podstatnější je, že sada CData již není dostupná a podporovaná pro Delphi 12 a vyšší. Bylo pro mě velmi smutným zjištěním, když jsem zjistil, že tyto komponenty – implementované poměrně hluboko v námi vyvíjených systémech – nejsou k dispozici a je nutné zajistit nějakou vhodnou náhradu.
Na základě dlouhodobé pozitivní spolupráce se společností nSoftware Inc. jsem si stáhl zkušební balíček jejich sady IPWorks. Po výměně několika e-mailů s jejich technickou podporou (musím zdůraznit, že jsou to skuteční profesionálové a reagují velmi rychle a komplexně) jsem byl ujištěn, že komponenta TipwLDAP splní všechna má očekávání a funkčnost vůči Active Directory.
Hlavní migrace z CData na IPWorks byla otázkou přibližně jednoho člověkodne. Ve skutečnosti je připojení k serveru Active Directory velmi jednoduché, založené na poskytnutí přihlašovacích údajů, adresy serveru a filtru pro vyhledávání. Základní myšlenkou je provést vyhledávání a zpracovat událost OnSearchResult. Pro každý vrácený výsledek se OnSearchResult jednou spustí.
Screen.Cursor:=crHourGlass;
ipwLDAP1.ServerName:=edADURL.Text;
ipwLDAP1.ServerPort:=StrToIntDef(edADPort.Text,389);
ipwLDAP1.DN:=edADUserName.Text;
ipwLDAP1.Password:=edADPassword.Text;
ipwLDAP1.Bind;
ipwLDAP1.DN:=edADBaseDN.Text;
ipwLDAP1.Timeout:=0;
if Pos(‚\‘,edADUserName.Text)>0 then ADUNClear:=StrAfter(edADUserName.Text,’\‘) else ADUNClear:=edADUserName.Text;
ipwLDAP1.Search(‚SamAccountName=’+ADUNClear);
Hodnoty konkrétních atributů souvisejících s hledaným účtem lze velmi pohodlně načíst vyhodnocením události OnSearchResult:
procedure TForm1.ipwLDAP1SearchResult(Sender: TObject; MessageId: Integer;
const DN: string);
var I:integer;
begin
if DN<>“ then
begin
for I:=0 to ipwLDAP1.Attributes.Count-1 do
begin
if AnsiLowerCase(ipwLDAP1.Attributes[I].AttributeType)=AnsiLowerCase(‚DisplayName‘) then
Xosoba:=ipwLDAP1.Attributes[I].Value;
if AnsiLowerCase(ipwLDAP1.Attributes[I].AttributeType)=AnsiLowerCase(‚TelephoneNumber‘) then
UID1:=ipwLDAP1.Attributes[I].Value;
if AnsiLowerCase(ipwLDAP1.Attributes[I].AttributeType)=AnsiLowerCase(‚FaxTelephoneNumber‘) then
UID2:=ipwLDAP1.Attributes[I].Value;
…
end;
Na závěr se po dokončení vyhledávání doporučuje volání metody Unbind:
procedure TFormServAD.ipwLDAP1SearchComplete(Sender: TObject;
MessageId: Integer; const DN: string; ResultCode: Integer;
const ResultDescription: string);
begin
ipwLDAP1.Unbind;
Screen.Cursor:=crDefault;
end;
Ve srovnání s komponentou CData Active Directory je řešení od IPWorks lehké, rychlejší a levnější – cena balíčku IPWorks je přibližně 1 500 USD. A myslím, že nejdůležitějším faktorem pro každého vývojáře bude, že je zaručena podpora pro budoucí verze Delphi.
O autorovi
Ing. Karel Janeček, MBA, MSc.
www.torry.net