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 user verifizierung mit ADSOpenObject (https://www.delphipraxis.net/183028-user-verifizierung-mit-adsopenobject.html)

Klaus01 5. Dez 2014 11:47

user verifizierung mit ADSOpenObject
 
Hallo zusammen,

ich stehe vor einem Rätsel..

Mit dieser Routine frage ich den AD auf die User credentials ab.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var Hr : HResult;
     outt :Pointer;
     Username,Password : WideString;
begin
  Username :='MeineKennung';
  PassWord:= 'MeinPasswort';
  coInitialize(nil);
  try
    Hr := ADSOpenObject('LDAP://meineDomain',pWideChar(Username),pWideChar(Password),ADS_SECURE_AUTHENTICATION,IID_IADs,Outt);
    if hr = S_OK then
      ShowMessage('Verified :o)')
    else
      ShowMessage(IntToStr(Hr));
  finally
    coUninitialize();
  end;
end;
Wird der Button das erstemal nach dem Start der Applikation gedrückt,
dann wird der User verifiziert.

Wird der Button dann ein zweitesmal gedrückt dann wird der User nicht verifiziert.
Das Ergebnis von ADSOpenObject schaut dann so aus:
Code:
[Content]
7995764
[OK]
Warum ist das so, muss ich nach dem ersten Aufruf noch etwas bereinigen bevor der zweite Aufruf wieder funktioniert?

Wenn die Applikation geschlossen und wieder geöffnet wird, funktioniert es wieder einmal.

Edit: Irgendwie scheint das ganze nicht zu funktionieren.
Verified wird wirkürlich angezeigt.
De User wird aich dann erfolgreich verifiziert, wenn ein falscher Name oder ein falsches Passwort übergeben wird.

Was ich machen möchte ist, einen User (eingeloggt auf einem nicht in der Domäne angemeldeten Rechner) verifizieren. Der AD ist von dem Rechner aber zu erreichen.
Ich möchte verhindern, dass die Nutzer der Applikation sich noch ein zusätzliches Passwort merken müssen. Geht das überhaupt?
[/Edit]


Grüße
Klaus

Klaus01 9. Dez 2014 09:28

AW: user verifizierung mit ADSOpenObject
 
Liste der Anhänge anzeigen (Anzahl: 2)
Guten Morgen,

mit der Verifizierung bin ich nch nicht viel weiter gekommen.
Ich bin jetzt auf die Nutzung der SSPI API umgestiegen.
Im Netz habe ich eine SSPIValidatePassword.pas gefunden.
Diese habe ich auf Unicode umgestellt und hießt nun bei mir SSPIValidateUser.
Ein kleines Bespeilprogramm ist im Anhang zu finden.

SSPILogonUser rufe ich so auf.

Delphi-Quellcode:
procedure TForm1.verifyButtonClick(Sender: TObject);
begin
  if SSPLogonUser(domainEdit.Text,usernameEdit.Text,passwordEdit.Text) then
    messageDlg('User verified',mtInformation,[mbOk],0)
  else
    messageDlg('User not verified',mtError,[mbOk],0);
end;

Wenn usernameEdit.Text und passwordEdit.Text leer sind wird die Meldung "User verifiziert" ausgegeben.
Wird domainEdit die Domäne eingetragen und werden in usernameEdit und passwordEdit die Daten eines gültigen
Users eingetragen wird "User not verified" ausgegeben.
Auch wenn die Userdaten ungültig sind wird "verständlicherweise" "User not verified" ausgegeben.

Die Routine GenServerContext beendet sich dann immer mit SEC_E_LOGON_DENIED.

Ich habe nicht die leiseste Ahnung was ich noch ändern könnte um das Problem zu beheben?

[Edit] Kann vielleicht jemand die Unit mal bei sich testen?

[Edit2] Wenn ich gegen meine lokalen Account teste, wird der User verifiziert.
Es ist dabei auch gleichgültig was ich als Domäne eingetragen habe..

Kann ich von einem "nicht Domänenrechner" keine Domänenuser verifizieren?

Grüße
Klaus

Sherlock 9. Dez 2014 09:42

AW: user verifizierung mit ADSOpenObject
 
Ich hab da mal eine grundsätzliche Frage: Ist das nicht so, daß man bei LDAP den gegenwärtig angemeldeten User verwendet? Wozu also den User nach Username und Passwort fragen?

Sherlock

Klaus01 9. Dez 2014 09:57

AW: user verifizierung mit ADSOpenObject
 
Zitat:

Zitat von Sherlock (Beitrag 1282729)
Ich hab da mal eine grundsätzliche Frage: Ist das nicht so, daß man bei LDAP den gegenwärtig angemeldeten User verwendet? Wozu also den User nach Username und Passwort fragen?

Den angemeldeten User will ich ja nicht verifizieren/überprüfen.
Das wurde ja schon bei der Anmeldung in der Domäne gemacht.

Ich wollte die Abfrage dazu nutzen - User gegen den AD zu verifizieren die
die Applikation auf Rechnern benutzen die nicht in der Domäne angemeldet sind.

Grüße
Klaus

Klaus01 11. Dez 2014 11:33

AW: user verifizierung mit ADSOpenObject
 
.. niemand eine Idee?

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 Uhr.

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