| Autor |
Beitrag |
tacl
Hält's aus hier
Beiträge: 13
WinXP, Linux, OS/2
Delphi2/2010 Prof., FoxPro, C++
|
Verfasst: Do 22.07.10 10:36
Hi Leute,
ich habe für mein Programm einen eigenen Anmeldemechanismus gebaut. Nun möchte ich eine automatische Anmeldung an mein Programm realisieren, wenn die Windows-Anmeldedaten einem Benutzerprofil in meinem Programm entsprechen.
Nun wäre meine Frage hierzu ob ein Abgleich von Anmeldedaten realisiert werden kann?
Das einfachste aus subjektiver Sicht wäre natürlich die aktuellen Windows Anmeldedaten samt Passwort auszulesen und gegen meine Zugangsdatenbank laufen zu lassen.
Objektiv fände ich es skandalös, wenn man das Passwort des aktuellen Windows-Users so ohne weiteres auslesen könnte.
Sinn hinter dieser Idee ist eigentlich die, dass die Rechner auf denen das Programm genutzt wird alle mit biometrischen Authentifizierungssystemen ausgestattet sind. Wenn die Anwender dann hinterher für das Programm doch ein Passwort eingeben müssen, ist das Käse...
Für Ideen (auch alternative Vorgehensweisen) wäre ich sehr dankbar.
Viele Grüße
Patrick Moderiert von Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 22.07.2010 um 13:04
_________________ Patrick
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 22.07.10 10:46
Wäre es nicht einfacher, wenn dein Programm die benutzerspezifischen Daten einfach im Userverzeichnis ablegt und von dort liest? Dann kannst du dir die Anmeldung komplett sparen - wenn sich ein User in Windows anmeldet, hat er Zugriff auf seine Daten/Einstellungen/Profil und bekommt von den anderen nichts mit.
_________________ We are, we were and will not be.
|
|
Tastaro
      
Beiträge: 414
Erhaltene Danke: 23
|
Verfasst: Do 22.07.10 10:48
Wenn in deinem Programm die gleichen Benutzernamen wie in Windows hinterlegt sind, dann kannst du doch jedem Zugang gewähren, der sich erfolgreich an Windows angemeldet hat.
Beste Grüße
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 22.07.10 10:51
|
|
tacl 
Hält's aus hier
Beiträge: 13
WinXP, Linux, OS/2
Delphi2/2010 Prof., FoxPro, C++
|
Verfasst: Do 22.07.10 10:53
Tastaro hat folgendes geschrieben : | | Wenn in deinem Programm die gleichen Benutzernamen wie in Windows hinterlegt sind, dann kannst du doch jedem Zugang gewähren, der sich erfolgreich an Windows angemeldet hat. |
In diesem Fall würde ich mich komplett auf die Sicherheit des Netzwerks verlassen. Denn jeder, der dann in irgendeiner Form auf die Datenbank und das Programm zugreifen kann, kann drauf zugreifen.
--- Moderiert von Narses: Beiträge zusammengefasst---
Gausi hat folgendes geschrieben : | | Wäre es nicht einfacher, wenn dein Programm die benutzerspezifischen Daten einfach im Userverzeichnis ablegt und von dort liest? Dann kannst du dir die Anmeldung komplett sparen - wenn sich ein User in Windows anmeldet, hat er Zugriff auf seine Daten/Einstellungen/Profil und bekommt von den anderen nichts mit. |
Das würde vorraussetzen, dass jeder Benutzer immer an der selben Workstation arbeitet. Alternativ dazu müsste das Netzwerk so aufgebaut sein, dass sämtliche persönlichen Daten in der ActiveDirectory gespeichert werden. Das geht zwar, habe ich aber in der Realität noch nie gesehen.
_________________ Patrick
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 22.07.10 11:06
Ok, damit kann man meine Idee dann schonmal vergessen. Wäre ja auch zu einfach gewesen. 
_________________ We are, we were and will not be.
|
|
tacl 
Hält's aus hier
Beiträge: 13
WinXP, Linux, OS/2
Delphi2/2010 Prof., FoxPro, C++
|
Verfasst: Do 22.07.10 11:10
Gausi hat folgendes geschrieben : | Ok, damit kann man meine Idee dann schonmal vergessen. Wäre ja auch zu einfach gewesen.  |
Trotzdem vielen Dank!
--- Moderiert von Narses: Beiträge zusammengefasst---
Danke für den Link. Grundsätzlich habe ich genau das gesucht.
Er läuft mir jedoch immer wieder in die Exception
Delphi-Quelltext 1:
| raise Exception.CreateFmt('Couldn''t query package info for NTLM, error %d\n', [ss]); | ausgelöst in Zeile 445. Das Kurriose ist, dass er vor der Exception auf ss < 0 abfragt. ss ist jedoch 1242332.
Hast Du die Unit schon genutzt und evtl. auch das Problem?
Danke und Gruß
Patrick
Moderiert von Narses: Delphi-Tags hinzugefügt
_________________ Patrick
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Do 22.07.10 13:21
| Zitat: | | Hast Du die Unit schon genutzt und evtl. auch das Problem? |
Die Frage ist gut. 
|
|
tacl 
Hält's aus hier
Beiträge: 13
WinXP, Linux, OS/2
Delphi2/2010 Prof., FoxPro, C++
|
Verfasst: Do 22.07.10 13:47
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 22.07.10 13:50
Es geht wohl nicht um die Satzstellung sondern darum, dass Luckie eine Unit auf seiner eigenen Seite verlinkt hat. Da ist die Wahrscheinlichkeit, dass er die schonmal benutzt hat, relativ groß. 
_________________ We are, we were and will not be.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 22.07.10 15:06
Also ich stelle nur Code auf meine Seite, den ich getestet habe und der bei mir funktioniert.
Leider verrät mir meine Glaskugel nicht unter welchen Windows der Fehler auftritt und ob beim Debuggen und mit welchem Delphi.
|
|
jaenicke
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 22.07.10 21:15
tacl hat folgendes geschrieben : | | ss ist jedoch 1242332. |
So hoch sollte eigentlich kein Error Code sein.
Sagt GetLastError vielleicht mehr?
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 23.07.10 09:16
tacl hat folgendes geschrieben : | | ...Objektiv fände ich es skandalös, wenn man das Passwort des aktuellen Windows-Users so ohne weiteres auslesen könnte... |
X-Setup kann es auslesen...
|
|
Dezipaitor
      
Beiträge: 220
|
Verfasst: Mi 28.07.10 00:47
Es geht einfacher:
Du erstellst eine Gruppe für Windows Benutzer, die sich in deinem Programm ohne Passwort anmelden können. Wenn z.B. der Benutzer Bob in der Gruppe DBUsers ist, dann kannst du deine Anmelderoutine in deinem Programm prüfen lassen, ob Bob in der Gruppe DBUsers ist (was er offensichtlich ist) und wenn ja, dann lässt du ihn ohne Passwort rein. So brauchst du die Passwörter nicht im Klartext.
Geht natürlich nur, wenn du das Passwort nicht noch für etwas anderes verwendest.
_________________ Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: blog.delphi-jedi.net = JEDI API LIB & Windows Security Code Library (JWSCL)
|
|
MarkusBauer
      
Beiträge: 70
Win XP Pro
Delphi 7 PE+Indy
|
Verfasst: Sa 31.07.10 23:29
Schick Nutzernamen und Passwort aus deiner Datenbank durch eine solche Funktion:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| function IsNTPasswordValid(Username: String; Password: String; Domain: String): Boolean; var token: THandle; begin LogonUser(PAnsiChar(Username), PAnsiChar(Domain), PAnsiChar(Password), LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, token); CloseHandle(token); Result := token <> 0; end; |
Aufruf dann etwa so: if IsNTPasswordValid(user,pass,'.') then...
Dann weißt du ob das Passwort aus deiner Datenbank mit dem Windowspasswort übereinstimmt. Setzt natürlich vorraus dass du die Passwörter so speicherst dass man sie rekonstruieren kann, wenn du MD5 o.ä. verwendest wird das nichts.
Getestet unter WinXP.
|
|