AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Windows Benutzerverwaltung mitverwenden
Thema durchsuchen
Ansicht
Themen-Optionen

Windows Benutzerverwaltung mitverwenden

Ein Thema von ralfiii · begonnen am 27. Jan 2011 · letzter Beitrag vom 7. Jun 2019
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#1

AW: Windows Benutzerverwaltung mitverwenden

  Alt 28. Jan 2011, 12:17
LDAP ist eine Untermenge der seit Windows 2000 (Server) unterstützten ADS (Active Directory Services).
Ok, verstehe. Ich suche eine Lösung mit der ich mit geringem Aufwand eine möglichst grosse Kundenzahl versorgen kann. Da klingt LDAP also nicht schlecht.

Zitat:
kann es sein, dass ein User seinen Login-Namen ändert so dass der User plötzlich für meine App wie ein neuer User aussieht?
Nur wenn du nach dem Namen gehst. Du solltest entweder die SID oder die RID (letzte Ziffernfolge in einer SID) nehmen.
Ich krieg da einen irre langen String, z.B. S-1-5-21-3926681305-3518172317-3193622278-1107
Ist da nun die "1107" die eindeutige Benutzerkennung?

Und noch eine Kleinigkeit:
Wenn ich LogonUser auf einem Rechner ausführe wo der Benutzer sich an einer Domäne angemeldet hat dann läuft alles perfekt.
Mach ich das bei mit auf meinem Entwicklungsrechner (lokaler Benutzer) und gebe den korrekten Usernamen/Passwort an, dann liefert LogonUser (mit LOGON32_LOGON_INTERACTIVE, oder?) True ganz egal ob ich die Domäne leer lasse oder eine falsche Angebe.
Gebe ich eine falsche Domäne an, dann liefert LookupAccountNameW "Der RPC-Server ist nicht verfügbar." als Fehler. Nix grosses, ist mir nur aufgefallen.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#2

AW: Windows Benutzerverwaltung mitverwenden

  Alt 28. Jan 2011, 12:29
Ich krieg da einen irre langen String, z.B. S-1-5-21-3926681305-3518172317-3193622278-1107
Ist da nun die "1107" die eindeutige Benutzerkennung?
RID == relative ID

Eindeutig ja, aber nur auf diesem Rechner. Nur der komplette irre lange String ist eineindeutig und sollte dies auch global sein (es handelt sich im Prinzip um eine GUID), wobei der Teil am Anfang den Rechner identifiziert. Bei Domänenkonten wäre dies die Domäne, nicht der lokale Rechner.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
musicman56
(Gast)

n/a Beiträge
 
#3

AW: Windows Benutzerverwaltung mitverwenden

  Alt 28. Jan 2011, 15:58
Hallo Ralf,

zu allen bisherigen Überlegungen und Beiträgen möchte ich zu bedenken geben: Die Lösung die du implementierst muss letztendlich auch gepflegt werden. Da kommt schon einiges an Aufwand auf dich zu. Der irgendwie aber auch bezahlt werden muss. Und zudem für den Anwender einigermaßen komfortabel sein sollte.

Ich habe eine ähnliche Situation: Eine Datenbankanwendung (Warenwirtschaft) mit kleiner Benutzerverwaltung, die intern einige Zugriffsrechte steuert und regelt. Diese Berechtigungen haben aber direkt NICHTS mit den Berechtigungen im Betriebssystem zu tun, so wie ich das sehe, und wie es bei mir auch ist. Ein OS-Admin muss nicht zwangsläufig auch in meiner Anwendung ein Admin sein, und umgekehrt: Jemand der in deinem Programm alle Rechte hat, muss nicht zwangsläufig auf betriebssystemebene Admin-Rechte haben.

Also macht eine Verknüpfung bestenfalls auf Namens-Ebene Sinn, und so habe ich das bei mir auch gelöst: In meinem Anmelde-Dialog belege ich den Benutzernamen für meine Software mit dem Windows-Benutzernamen vor, sodass der Anwender lediglich sein Passwort - wenn vorgegeben - eingeben muss.

Zitat:
Soweit ich das verstehe ist oft ein Dummy-User an einem Rechner angemeldet...
... und das hält den Aufwand die Benutzer in deinem Programm anzulegen doch sehr in Grenzen. Was wiederum für eine "einfache" Lösung des Problems spricht.
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Windows Benutzerverwaltung mitverwenden

  Alt 28. Jan 2011, 16:15
Also macht eine Verknüpfung bestenfalls auf Namens-Ebene Sinn, und so habe ich das bei mir auch gelöst: In meinem Anmelde-Dialog belege ich den Benutzernamen für meine Software mit dem Windows-Benutzernamen vor, sodass der Anwender lediglich sein Passwort - wenn vorgegeben - eingeben muss.
Ich glaube ich habe nun einen guten Weg gefunden:
3 Modi:
1.) Old style (wir verwalten User in der DB)
2.) Single Sign on -> ich verwende den aktuell benutzten Windows user namen
3.) LDAP -> ich überprüfe ob username/passwort auf dem Win-System (gegebenenfalls Domäne) definiert ist.

Für die Fälle 2 und 3 werden - sofern gleichnamige User in der Applikations-DB noch nicht existieren - Benutzer in unser DB angelegt, mit sehr eingeschränkten Rechten. Der Applikations-Admin kann diese Benutzer dann leicht in eine privilegiertere Usergruppe verschieben.

Von der Verwendung der SID sehe ich ab, weil sicher manche (wie auch wir hier in der Firma) ein sehr simples Netzwerk ohne AD haben, d.h. die Benutzer wurden manuell auf allen Rechnern angelegt. Da wäre dann wieder die SID unterschiedlich.

Ralf
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Windows Benutzerverwaltung mitverwenden

  Alt 28. Jan 2011, 19:46
http://de.wikipedia.org/wiki/Security_Identifier Da steht alles.

Eventuell hilft ja diese Unit: http://www.michael-puff.de/Programmi...tePassword.pas
Damit kannst du überprüfen, ob der Benutzer im System existiert und ob er ein korrektes Passwort eingegeben hat.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#6

AW: Windows Benutzerverwaltung mitverwenden

  Alt 10. Feb 2011, 08:51
http://de.wikipedia.org/wiki/Security_Identifier Da steht alles.

Eventuell hilft ja diese Unit: http://www.michael-puff.de/Programmi...tePassword.pas
Damit kannst du überprüfen, ob der Benutzer im System existiert und ob er ein korrektes Passwort eingegeben hat.
Das ist eine recht lange Unit und ich kann eigentlich keinen Vorteil gegenüber der sehr simplen Lösung
Delphi-Quellcode:
// Check if a username/password exists on a system
// if parameter domain is left blank test is performed on the current domain
function CheckUserAccount(Username, Password, Domain : string) : boolean;
var token: THandle;
begin
     LogonUser(PChar(Username), PChar(Domain), PChar(Password),
                    LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,token);
     CloseHandle(token);
     result:=token<>0;
end;
finden. Danke dennoch!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#7

AW: Windows Benutzerverwaltung mitverwenden

  Alt 10. Feb 2011, 09:46
Ich dachte LogonUser hat auch noch ein Result, welches man prüfen könnte.
Im MSDN steht nicht drin, daß Token auch im Fehlerfall immer auf 0 gesetzt wird.

Delphi-Quellcode:
function CheckUserAccount(Username, Password, Domain : string) : boolean;
var token: THandle;
begin
  if LogonUser(PChar(Username), PChar(Domain), PChar(Password),
    LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, Token) then
  begin
    CloseHandle(Token);
    Result := Token <> 0;
  end else
    Result := False;
end;
Delphi-Quellcode:
function CheckUserAccount(Username, Password, Domain : string) : boolean;
var token: THandle;
begin
  Result := LogonUser(PChar(Username), PChar(Domain), PChar(Password),
    LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, Token) and (Token <> 0);
  if Result then
    CloseHandle(Token);
end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#8

AW: Windows Benutzerverwaltung mitverwenden

  Alt 10. Feb 2011, 18:04
Vielleicht sollte ich auch noch schnell auf MSDN-Library durchsuchenSecureZeroMemory verweisen, wenn das Paßwort schon im Speicher der Anwendung gehalten wird ...
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#9

AW: Windows Benutzerverwaltung mitverwenden

  Alt 7. Jun 2019, 12:16
Ich belebe mal den uralten Thread.
Bin drüber gestolpert, dass LogonUser mit LOGON32_LOGON_NETWORK richtig arbeitet wenn der Benutzername richtig geschrieben wurde.
Wenn's den Nutzer aber nicht gibt, dann liefert LogonUser IMMER true.
Nutzt man LOGON32_LOGON_INTERACTIVE dann funktionieren alle Fälle richtig.

Ich hab die MS-Docu durchgelesen, kapier' aber nicht warum das so ein muss.

Ich stell's mal einfach um in der Hoffnung dass mir nicht andere Siedeffects das Genick brechen.

Jemand eine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#10

AW: Windows Benutzerverwaltung mitverwenden

  Alt 29. Dez 2017, 12:29
Hallo!
Ich grab mal den alten Thread wieder aus.

Eventuell hilft ja diese Unit: http://www.michael-puff.de/Programmi...tePassword.pas
Damit kannst du überprüfen, ob der Benutzer im System existiert und ob er ein korrektes Passwort eingegeben hat.
Die Unit funktioniert bei mir nicht.

Will ich mein Passwort auf meinem lokalen Rechner (der kein Teil einer Domain ist) überprüfen (mit Domain="" oder "localhost" oder "." probiert) krieg ich ein
"Im Projekt LDAP_ActiveDirectory_Test.exe ist eine Exception der Klasse Exception mit der Meldung 'Couldn't query package info for NTLM, error -2146893051\n' aufgetreten."
Die Exception wird zwar gehandled, aber die Funktion liefert immer false zurück.

Teste ich das in an einem Rechner der Teil einer Domain ist, und übergebe den Domainnamen an SSPLogonUser ("graz.local" oder "graz" oder "ldaptest.graz.local" oder "192.168.0.4" probiert), kommt auch immer false zurück. (Evtl auch die Exception, aber dort ist kein Delphi drauf)

Muss ich die Domain oder den Usernamen speziell formatieren?

Oder, ganz anders gefragt: Kann ich User-Credentials (also Name/Passwort) bei einem AD-Domänenserver testen, und das von einem Rechner aus, der NICHT Teil der Domäne ist?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 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-2025 by Thomas Breitkreuz