Die Active Directory-Authentifizierung über LDAP mit [email protected] mit Delphi
Sehen Sie das code-snippet unten. Ich bin derzeit sammeln die Informationen über die ANZEIGE von der aktuell angemeldete Benutzer mit adshlp und ActiveDs_TLB. Ich habe ein Formular, das ermöglicht dem Benutzer, geben Sie Ihr AD-Kennwort und die ich überprüfen, dass diese korrekt ist, bevor der Zugriff auf das system. Diese woks in Ordnung. Ich habe das problem jetzt ist, dass die Nutzer wollen in der Lage zu geben irgendwelche AD und ID in der form mydomain.com\Benutzer-id und-code authentifizieren und bringen wieder die gleichen Daten der code derzeit abruft. Ich habe nicht in der Lage zu finden, eine LDAP-aufrufen, die das machen werden. Ich würde schätzen jede Hilfe und Anregungen, die ich bekommen kann.
Dank
JS:
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;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie könnte tun ist, die Suche für diesen Benutzer basierend auf den
userid
(ohne domain) und somit erhalten die entsprechenden Infos zurück.Schrieb ich einen Artikel in "Die Delphi-Magazin" schon im Oktober 2000 über die Suche mithilfe von ADSI und Delphi - und können Sie immer noch herunterladen meiner code-Beispiel und eine Delphi-Komponente
TADSISearcher
aus meiner web-site - hoffentlich können Sie loslegen!Benutze ich auch ADsOpenObject für die LDAP-Validierung und in Ihrem code, den Sie passieren die domain als parameter, so verwenden diese parameter in der ADsOpenObject nennen, oder vielleicht habe ich nicht klar verstanden die Frage
try..finally
block mit der Einstellung der input-string-parameter zunil
, gibt es eine weitere Sache, über dieADsOpenObject
Funktion.MSDN
explizit sagt "Diese Funktion sollte nicht verwendet werden, nur um Benutzeranmeldeinformationen zu überprüfen.".