Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi NICHT INTERAKTIVER Windows Active directory logon (https://www.delphipraxis.net/103279-nicht-interaktiver-windows-active-directory-logon.html)

iskywalker 13. Nov 2007 18:49


NICHT INTERAKTIVER Windows Active directory logon
 
Hallo!
Ich brauche eine routine um zu testen ob der benutzer, der gerade angemeldet ist, in dem active directory des domain controllers vorhanden ist. Entsprechend muss ich die Berechtigung testen. Das aber ohne die Eingabe des Benutzers (praktisch wie outllok das macht). Die Lösungen die ich gefunden habe, brauchte alle eine interaktive Eingabe des Benutzers SSPI.
Kennt jemand einen eleganten Weg?

ISKywalker

marabu 13. Nov 2007 18:52

Re: NICHT INTERAKTIVER Windows Active directory logon
 
Hi,

wenn der Benutzer an der Domain angemeldet ist, dann ist er dort auch vorhanden - warum willst du nochmal nachsehen?

Grüße vom marabu

iskywalker 14. Nov 2007 11:38

Re: NICHT INTERAKTIVER Windows Active directory logon
 
Hi!
Ich wollte auch gern erfahren, wie ich den Benutzername ermittlen kann.
Aber auch vorgesehen ist eine Feature, die erlaubt, nach einen bestimmte Timeout den Passwort abzufragen(wegen der Sicherheit).
Gruß
ISKywalker

mkinzler 14. Nov 2007 12:02

Re: NICHT INTERAKTIVER Windows Active directory logon
 
Melde dich doch unter einem anderen Benutzer am LDAP an.

iskywalker 14. Nov 2007 12:08

Re: NICHT INTERAKTIVER Windows Active directory logon
 
Warum denn?

mkinzler 14. Nov 2007 12:11

Re: NICHT INTERAKTIVER Windows Active directory logon
 
Dann kannst du die authentifizieren ohne den benutzer nach seinem Passwort Fragen zu müssen.

iskywalker 14. Nov 2007 12:17

Re: NICHT INTERAKTIVER Windows Active directory logon
 
Aber outlook macht das, anmelden mit dem benutzerdaten an den active directory server. ICh würde gern auch so was machen :mrgreen: .

Alter Mann 14. Nov 2007 20:13

Re: NICHT INTERAKTIVER Windows Active directory logon
 
Liste der Anhänge anzeigen (Anzahl: 1)
HI,

probier mal das hier.

generic 15. Nov 2007 12:59

Re: NICHT INTERAKTIVER Windows Active directory logon
 
du kannst mit dem kerberos/ntlm den prozess des server in den benutzerkontext mit allen tokens bringen.
"impersonate" ist das das stichwort.

im msdn sind dazu auch beispiele. diese machen aber eine authentifizierung über netzwerk.
du kannst das dann schlanker im arbeitsspeicher abbilden oder du lässt dienst und client doch mit tcp sich unterhalten.

such mal nach:
AcquireCredentialsHandleA
InitializeSecurityContextA
CompleteAuthToken
AcceptSecurityContext
ImpersonateSecurityContext

iskywalker 16. Nov 2007 13:00

Re: NICHT INTERAKTIVER Windows Active directory logon
 
Hi!
Alter Mann: Ich kriege user = '' ...
Die Domaininfos sind aber richtig. Die interessieren mich aber nicht sonderlich, da ich sie auch mit ipconfig bekommen kann.
Aber Danke für den Code!
generic: deine Antwort ist wirklich generic :-D
Ich möchte eigentlich ohne passwort und username, bzw. will ich wissen, ob wie der angemeldet user heißt, und ob er in active directory ist. So wie outlook.
in
http://support.microsoft.com/kb/279815/de
schreiben die über unified logon. So weit ich es verstanden habe, ein mal anmelden dann bis zum nächsten logoff nie wieder. Genau das möchte ich. In der URL melden sie zwar den Benutzer mittels SSP brauchen aber trotzdem username und string explizit.

iskywalker 16. Nov 2007 15:48

Re: NICHT INTERAKTIVER Windows Active directory logon
 
Hi!
Ich korrigiere mich.
Alter Mann: username wurde gzurückgeliefert, aber nicht login name. D. h. vorname und nachname und nicht mein login.
Danke!

generic 16. Nov 2007 18:13

Re: NICHT INTERAKTIVER Windows Active directory logon
 
Ja was soll ich machen, soll ich dir den Code geben für welchen ein Kunde viel Geld gezahlt hat?
Du kannst einfach das Beispiel im MSDN abtippen, fertig.
Andere Variante du kannst den Delphicode bei mir kaufen.
Ich habe 8 Stunden dran gesessen, bis der Code fehlerfrei gearbeitet hat.
Danach wird sich der Preis richten. Schreib mich dann bitte per PN an.
Die Kerberos Lösung erfordert keine Eingaben des Users.

Wir können dir doch nicht alles programmieren und du setzt dich ins gemachte Nest.
Ich habe dir die Funktionen gesagt, welche benötigt werden. Jetzt leg los.

Alter Mann 16. Nov 2007 18:54

Re: NICHT INTERAKTIVER Windows Active directory logon
 
Hi iskywalker,

LoginName, etwa so?

Delphi-Quellcode:
function LoginName : String;
var
  ADSystemInfo : TADSystemInfo;
  _aUser       : IADsUser;
begin
  Result := 'ohne';
  ADSystemInfo := TADSystemInfo.Create(Self);
  try
    if SUCCEEDED(ADsGetObject('LDAP://' + ADSystemInfo.UserName, IADsUser, _aUser)) then Result := _aUser.Get('sAMAccountName');
  finally
    ADSystemInfo.FreeOnRelease;
  end;
end;
@generic

Warum so aufgebracht, habe ich etwas überlesen?

Gruß

iskywalker 19. Nov 2007 15:22

Re: NICHT INTERAKTIVER Windows Active directory logon
 
Tausend Dank Alter Mann!
Hätte ich selber drauf kommen können (in der ActiveDs_TLB.pas steht ja alles).
Wenn man _aUser zurückgelierfert bekommt, da kann man ne menge infos holen (in der ActiveDs_TLB.pas sind die Funktionen beschrieben).

generic:
Ich wollte nur einen Einstieg und keine komplette Lösung! Tut mir leid, wenn es dir so viel gekostet hat, dafür habe ich selber wenig Dokumentation gefunden. Wobei fragen darf ich ja noch? Oder wofür ist der forum hier (im schlimmsten fall hätte ich deine Lösung gekauft, aber das thema ist nicht so dringend, und was ich wirklich brauche, habe ich bereits gefunden (Tabelle mit alle user an den Active Directory)).

generic 19. Nov 2007 16:17

Re: NICHT INTERAKTIVER Windows Active directory logon
 
Ich habe mir deine Ursprungsfrage nochmal durchgelesen und feststellen müssen, dass was ich dir geschrieben habe nicht viel damit zu tun hat.

Das was ich geschrieben habe kann einen Prozess welcher in einen Konto läuft in das Konto des Nutzers bringen (per Kerberos).

Allerdings habe ich auch keine Ahnung wo du drauf hinaus willst.
Ein PC welcher in einer Domain ist, kann 2 unterschiedliche Arten von Usern anmelden lassen.
Lokale User und Domain User

Mit den Windows API Funktionen GetUserName und GetUsernameEx kannst du den Usernamen/Domain ermitteln.

Ist der User nicht im AD wird er sich nicht anmelden können an der Kiste.
Also brauchst du eigendlich nur zu prüfen ob er lokales Konto oder ein Domainkonto nutzt.

Daher meine ich brauchst du keine LDAP-Anfrage machen.

iskywalker 19. Nov 2007 18:34

Re: NICHT INTERAKTIVER Windows Active directory logon
 
Uhm guter punk!
Ich muss aber für ein anderes Program die email bekommen, und mit IADsUser ist das prima gelöst.
Ich hoffe nicht zu sehr zu nerven, aber wie bekommt man die Info, dass ein user lokal angemeldet ist, und nicht über das netzwerk OHNE LDAP ?
Geht das über LookUpAccountName (testen ob local geht dann in der domain, wie hier gemacht wurde?
DAnke noch mal!

generic 19. Nov 2007 19:07

Re: NICHT INTERAKTIVER Windows Active directory logon
 
die email hat aber nichts mit dem benutzerkonto zu tun.

natürlich der exchangeserver erweitert das ad um die emailfelder, aber der nutzer braucht ja kein exchangekonto verwenden. der nutzer könnte ja auch ein z.b. thunderbird verwenden mit einen gmail konto.
auch das exchange konto ist ist nicht an einer emailadresse gebunden. über drittanbieter wie z.b. gfi kann das postfach auch anders gefüllt werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz