Autor Beitrag
tacl
Hält's aus hier
Beiträge: 13

WinXP, Linux, OS/2
Delphi2/2010 Prof., FoxPro, C++
BeitragVerfasst: 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 user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 22.07.2010 um 13:04

_________________
Patrick
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 414
Erhaltene Danke: 23



BeitragVerfasst: 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



BeitragVerfasst: Do 22.07.10 10:51 
tacl Threadstarter
Hält's aus hier
Beiträge: 13

WinXP, Linux, OS/2
Delphi2/2010 Prof., FoxPro, C++
BeitragVerfasst: Do 22.07.10 10:53 
user profile iconTastaro hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconNarses: Beiträge zusammengefasst---

user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 22.07.10 11:06 
Ok, damit kann man meine Idee dann schonmal vergessen. Wäre ja auch zu einfach gewesen. :P

_________________
We are, we were and will not be.
tacl Threadstarter
Hält's aus hier
Beiträge: 13

WinXP, Linux, OS/2
Delphi2/2010 Prof., FoxPro, C++
BeitragVerfasst: Do 22.07.10 11:10 
user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Ok, damit kann man meine Idee dann schonmal vergessen. Wäre ja auch zu einfach gewesen. :P


Trotzdem vielen Dank! :-)

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Das geht mittels SSPI: www.michael-puff.de/...ierung/Delphi/Units/


Danke für den Link. Grundsätzlich habe ich genau das gesucht.
Er läuft mir jedoch immer wieder in die Exception
ausblenden 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 user profile iconNarses: Delphi-Tags hinzugefügt

_________________
Patrick
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Do 22.07.10 13:21 
Zitat:
Hast Du die Unit schon genutzt und evtl. auch das Problem?

Die Frage ist gut. :D
tacl Threadstarter
Hält's aus hier
Beiträge: 13

WinXP, Linux, OS/2
Delphi2/2010 Prof., FoxPro, C++
BeitragVerfasst: Do 22.07.10 13:47 
user profile iconthepaine91 hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
Hast Du die Unit schon genutzt und evtl. auch das Problem?

Die Frage ist gut. :D


Ok, die Satzstellung ist falsch, aber sonst?
Ist alles die antrainierte Delphi Syntax n'schuld. ;-)

_________________
Patrick
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 22.07.10 13:50 
Es geht wohl nicht um die Satzstellung sondern darum, dass user profile iconLuckie 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 22.07.10 21:15 
user profile icontacl hat folgendes geschrieben Zum zitierten Posting springen:
ss ist jedoch 1242332.
So hoch sollte eigentlich kein Error Code sein. :gruebel:

Sagt GetLastError vielleicht mehr?
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 23.07.10 09:16 
user profile icontacl hat folgendes geschrieben Zum zitierten Posting springen:
...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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 220



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 70

Win XP Pro
Delphi 7 PE+Indy
BeitragVerfasst: Sa 31.07.10 23:29 
Schick Nutzernamen und Passwort aus deiner Datenbank durch eine solche Funktion:

ausblenden 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.