Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi benutzername und passwort überprüfen (https://www.delphipraxis.net/11619-benutzername-und-passwort-ueberpruefen.html)

Illuminator-23-5 10. Nov 2003 17:32


benutzername und passwort überprüfen
 
wie kann man das passwort zu einem benutzernamen überprüfen? sprich ich habe den benutzernamen und ein passwort und will rausfinden, ob das Passwort stimmt
wie geht das? (ohne logonUser, das geht bei mir wegen der rechte nicht...)

Matze 10. Nov 2003 17:34

Re: benutzername und passwort überprüfen
 
Wo speicherst du denn das Passwort, oder wie?

Illuminator-23-5 10. Nov 2003 17:43

Re: benutzername und passwort überprüfen
 
das Passwort wird in einem edit eingegeben, ebenso wie der Benutzername

Die Muhkuh 10. Nov 2003 18:16

Re: benutzername und passwort überprüfen
 
Hi Illu,


wo und wie speicherst du die Datei ab?

Illuminator-23-5 10. Nov 2003 18:22

Re: benutzername und passwort überprüfen
 
ok, verständnisschwierigkeiten:
ich brauch das für ein netzwerk
ich hab so einen kleinen "explorer" gefunden, den möcht ich dann unter einem anderen User starten, um auf dessen Dateien zugreifen zu können.
Dazu muss ich aber den Benutzernamen und das Passwort einlesen und überprüfen!

mr2 10. Nov 2003 18:37

Re: benutzername und passwort überprüfen
 
Hallo,

versuchs mal so:
Delphi-Quellcode:

// Beispielaufruf
var
  Res: THandle;
  bValid: Boolean;
begin
  Res := Logon('Knut', '.', 'geheim', LOGON32_LOGON_INTERACTIVE);
  bValid := (Res <> INVALID_HANDLE_VALUE);
  if bValid then begin
    CloseHandle(Res); // Handle unbedingt wieder schließen!!
    ShowMessage('Logon erfolgreich');
  else ShowMessage('Logon fehlgeschlagen');
end;

// notwendige Methoden, Konstanten, Typen
uses
  Windows;

type
  TLogonRec = record
    U, D, P : PChar;
    Flag   : Cardinal;
    Token  : THandle;
  end;

  PrivFun = function(var UserData) : bool;

const
  SE_CHANGE_NOTIFY_NAME            = 'SeChangeNotifyPrivilege';

procedure PrivilegedExec(const Prv: string; Fun: PrivFun; var UserData);
var
  Acc : THandle;
  NT  : TTokenPrivileges;
  OT  : ^TTokenPrivileges;
  i   : Cardinal;
begin
  if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, Acc)
  then begin
    // working on NT
    NT.PrivilegeCount := 1;
    NT.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    LookupPrivilegeValue(nil, PChar(Pointer(Prv)), NT.Privileges[0].Luid);
    OT := nil;
    AdjustTokenPrivileges(Acc, false, NT, 0, OT^, i);
    try
      if not Fun(UserData)
      then RaiseLastOSError;
    finally
      AdjustTokenPrivileges(Acc, true, NT, 0, OT^, i);
    end;
  end else begin
    // working on W95/98
    if not Fun(UserData)
    then RaiseLastOSError;
  end;
end;

function _Logon2(var Data) : Bool;
begin
  with TLogonRec(Data) do
  Result := LogonUser(U, D, P, Flag, LOGON32_PROVIDER_DEFAULT, Token);
end;

function Logon(const User, Domain, Passw: string; Flag: Integer): THandle;
var
  LR : TLogonRec;
begin
  LR.U := PChar(User);
  LR.D := PChar(Domain);
  LR.P := PChar(Passw);
  LR.Flag := Flag;
  LR.Token := 0;
  PrivilegedExec(SE_CHANGE_NOTIFY_NAME, _Logon2, LR);
  Result := LR.Token;
end;

Illuminator-23-5 10. Nov 2003 18:42

Re: benutzername und passwort überprüfen
 
sieht gut aus, aber ich bekomme immer 'logon erfolgreich', auch wenn ich das falsche Passwort eingebe!

mr2 10. Nov 2003 18:58

Re: benutzername und passwort überprüfen
 
Hallo,

Domain und Passwort waren vertauscht:
Delphi-Quellcode:
  Res := Logon(UserNm.Text, '.', PassWd.Text, LOGON32_LOGON_INTERACTIVE);
Eventuell muss dem ausführenden Benutzer noch ein Recht gewährt werden:

- secpol.msc ausführen
- Lokale Sicherheitsrichtlinien / Zuweisen von Benutzerrechten
- Erstellen eines Token-Objekts & Einsetzen als Teil des Betriebsystems für den "Passwort-Prüfer" aktivieren
- danach neu anmelden

Matze 10. Nov 2003 19:17

Re: benutzername und passwort überprüfen
 
Zitat:

Zitat von Matze
Wo speicherst du denn das Passwort, oder wie?

Zitat:

Zitat von Spider
wo und wie speicherst du die Datei ab?

irgendwie das selbe. :mrgreen:

Illuminator-23-5 12. Nov 2003 13:33

Re: benutzername und passwort überprüfen
 
wenn das Passwort stimmt, passts,
doch wenn es nicht stimmt
exception "...Anmeldung fehlgeschagen: unbekannter Benutzername oder falsches Kennwort..."
und zwar hier:
Delphi-Quellcode:
//Prozedur: PrivilegedExec
    try
      if not Fun(UserData)
      then RaiseLastOSError;  //<-- Hier
    finally
      AdjustTokenPrivileges(Acc, true, NT, 0, OT^, i);
    end;
trotz des try-blocks bekomm ich die exception! Warum?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 Uhr.
Seite 1 von 2  1 2      

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