Programmanmeldung
Moderator: Moderatoren
- andreas
- Der Entwickler von "Deep Thought"
- Beiträge: 1902
- Registriert: Mi, 28. Sep 2005 10:53
- Wohnort: Osnabrück
- Hat sich bedankt: 4 Mal
- Kontaktdaten:
Programmanmeldung
Hallo Leute,
ich habe ein Programm, das bei dem Start eine Anmeldung verlangt, um die Zugriffsrechte zu steuern, wobei die Benutzerverwaltung im Programm integriert ist.
Jetzt kommt die Frage, ob ich das nich vereinheitlichen und die Anmeldedaten von dem Windowsserver holen kann. Gibt es eine Möglichkeit die Anmeldedaten (Benutzer und Passwort) von Windows in XBase++ zu ermitteln oder Windows frage, ob die Anmeldedaten stimmen? Als vorschlag wäre vielleicht LDAP zugriff über API, leider kenne ich mich damit nicht aus und meine English-Kenntnisse sind richtig schlecht, um das auf Microsoft-Seiten zu lesen.
ich habe ein Programm, das bei dem Start eine Anmeldung verlangt, um die Zugriffsrechte zu steuern, wobei die Benutzerverwaltung im Programm integriert ist.
Jetzt kommt die Frage, ob ich das nich vereinheitlichen und die Anmeldedaten von dem Windowsserver holen kann. Gibt es eine Möglichkeit die Anmeldedaten (Benutzer und Passwort) von Windows in XBase++ zu ermitteln oder Windows frage, ob die Anmeldedaten stimmen? Als vorschlag wäre vielleicht LDAP zugriff über API, leider kenne ich mich damit nicht aus und meine English-Kenntnisse sind richtig schlecht, um das auf Microsoft-Seiten zu lesen.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16516
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Andreas,
ein kleiner Tipp: Wenn Deine Anwendung lokal läuft, kannst Du ja davon ausgehen, dass die Anmeldung geklappt hat (sonst könnte der User das Programm ja nicht starten). Also bräuchtest Du nur noch den Namen des Users, der gerade angemeldet ist - und den findest Du über die entsprechenden Umgebungsvariablen heraus (XP z.B.: USERNAME)
Viele Grüße,
Martin
ein kleiner Tipp: Wenn Deine Anwendung lokal läuft, kannst Du ja davon ausgehen, dass die Anmeldung geklappt hat (sonst könnte der User das Programm ja nicht starten). Also bräuchtest Du nur noch den Namen des Users, der gerade angemeldet ist - und den findest Du über die entsprechenden Umgebungsvariablen heraus (XP z.B.: USERNAME)
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9361
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Hallo, Andreas.
An das Paßwort ist m.E. - auch aus gutem Grund - kein Herankommen, aber den Windows-Benutzernamen kann man recht leicht abfragen:
An das Paßwort ist m.E. - auch aus gutem Grund - kein Herankommen, aber den Windows-Benutzernamen kann man recht leicht abfragen:
Code: Alles auswählen
FUNCTION wGetUserName()
LOCAL nDll, cRetVal := space(256), nRetVal := 0, nSize := 255
nDll := DllLoad( "ADVAPI32.DLL")
IF nDll # 0
DllCall( nDll, DLL_STDCALL, "GetUserNameA", ;
@cRetVal, @nSize )
DllUnload( nDll )
ENDIF
RETURN ( cRetVal )[color=darkred] // da ist der Benutzername drin[/color]
Herzlich,
Tom
Tom
- andreas
- Der Entwickler von "Deep Thought"
- Beiträge: 1902
- Registriert: Mi, 28. Sep 2005 10:53
- Wohnort: Osnabrück
- Hat sich bedankt: 4 Mal
- Kontaktdaten:
Hallo Martin und Tom,
mein Kollege hat bei Microsoft folgenden Artikel gefunden
http://www.microsoft.com/germany/msdn/l ... Teil2.mspx.
Daraus habe ich folgende Funktion geschrieben, die mir logischen Wert liefert, ob die Anmeldedaten stimmen oder nicht.
mein Kollege hat bei Microsoft folgenden Artikel gefunden
http://www.microsoft.com/germany/msdn/l ... Teil2.mspx.
Daraus habe ich folgende Funktion geschrieben, die mir logischen Wert liefert, ob die Anmeldedaten stimmen oder nicht.
Code: Alles auswählen
**Konstanten für LogonType
#DEFINE LOGON32_LOGON_INTERACTIVE 2
#DEFINE LOGON32_LOGON_NETWORK 3
#DEFINE LOGON32_LOGON_BATCH 4
#DEFINE LOGON32_LOGON_SERVICE 5
#DEFINE LOGON32_LOGON_UNLOCK 7
#DEFINE LOGON32_LOGON_NETWORK_CLEARTEXT 8
#DEFINE LOGON32_LOGON_NEW_CREDENTIALS 9
**Konstanten für ProviderType
#DEFINE LOGON32_PROVIDER_DEFAULT 0
#DEFINE LOGON32_PROVIDER_WINNT35 1
#DEFINE LOGON32_PROVIDER_WINNT40 2
#DEFINE LOGON32_PROVIDER_WINNT50 3
**Authentifizierung des Benutzers zum Windows-Server überprüfen
FUNCTION CheckLogOn( cUsername, cPasswort, cDomainname )
LOCAL nRet := 0
LOCAL nDLL := DLLload("ADVAPI32.DLL")
local lOk := .f.
LOCAL lRet := DLLCall(nDLL, DLL_STDCALL, "LogonUserA", cUserName, cDomainname, cPasswort,;
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, @nRet)
DLLUnload(nDLL)
*msgbox( var2char(lRet) + chr(13) + var2char(nLen) )
IF nRet > 0
lOk := .t.
ENDIF
RETURN lOk
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Hallo Andreas,
über:
cName := GetEnv( "USERNAME" ) [ Gruß an Tom: Es geht auch kürzer ]
ermittelst Du den aktuellen Windows-User.
Wie Tom schon sagte, kann das Passwort eines Users nicht über das API ermittelt werden, sondern nur festgestellt werden, ob das Passwort zum User richtig ist.
Deine Überlegungen machen übrigens m.E. nur dann Sinn, wenn innerhalb Deiner Anwendung die Zugangspassworte zur Anwendung nicht verwaltet werden sondern nur die Benutzernamen. Die Paßwortveriftzierung müßte dann entsprechend über die von Dir dargestellte API-Routine ablaufen. Dies hätte allerdings den Vorteil, dass bei regelmäßiger Änderung des Windows-Paßwortes auch der Zugang zur Anwendung entsprechend gesichert wird, ohne das dies manuell innerhalb der Anwendung händisch nachgpflegt werden muß bzw. dafür spezielle Routinen programmiert werden müssten.
über:
cName := GetEnv( "USERNAME" ) [ Gruß an Tom: Es geht auch kürzer ]
ermittelst Du den aktuellen Windows-User.
Wie Tom schon sagte, kann das Passwort eines Users nicht über das API ermittelt werden, sondern nur festgestellt werden, ob das Passwort zum User richtig ist.
Deine Überlegungen machen übrigens m.E. nur dann Sinn, wenn innerhalb Deiner Anwendung die Zugangspassworte zur Anwendung nicht verwaltet werden sondern nur die Benutzernamen. Die Paßwortveriftzierung müßte dann entsprechend über die von Dir dargestellte API-Routine ablaufen. Dies hätte allerdings den Vorteil, dass bei regelmäßiger Änderung des Windows-Paßwortes auch der Zugang zur Anwendung entsprechend gesichert wird, ohne das dies manuell innerhalb der Anwendung händisch nachgpflegt werden muß bzw. dafür spezielle Routinen programmiert werden müssten.
- andreas
- Der Entwickler von "Deep Thought"
- Beiträge: 1902
- Registriert: Mi, 28. Sep 2005 10:53
- Wohnort: Osnabrück
- Hat sich bedankt: 4 Mal
- Kontaktdaten:
Hallo Leute,
danke für die Antworten.
Ich wollte eigentlich nur erreichen, dass die Benutzer sich nicht ständig viele Passwörter merken und evtl. bei der Passwortänderung das gleiche Passwort an mehreren Stellen ändern müssen. Das funktioniert mit meiner funktion, die mir sagt, ob die Anmeldedaten stimmen, was mir vollkommen ausreicht. Um die Benutzernamen brauche ich keine Sorgen zu machen, da die bei uns fest vergeben sind und nicht so schnell geändert werden.
danke für die Antworten.
Ich wollte eigentlich nur erreichen, dass die Benutzer sich nicht ständig viele Passwörter merken und evtl. bei der Passwortänderung das gleiche Passwort an mehreren Stellen ändern müssen. Das funktioniert mit meiner funktion, die mir sagt, ob die Anmeldedaten stimmen, was mir vollkommen ausreicht. Um die Benutzernamen brauche ich keine Sorgen zu machen, da die bei uns fest vergeben sind und nicht so schnell geändert werden.
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Programmanmeldung
Hi,
deine Funktion ist Klasse und eröffnet neue Möglichkeiten - irgendwie hatte ich das schon wieder vergessen oder damals übersehen.
Normalerweise nutze ich zwar auch immer über USERNAME den gleichen Benutzernamen wie der angemeldete und natürlich wird der grundsätzliche Zugang im Programm über Netzwerkregeln geregelt, aber bei einigen Menüpunkten hätte ich schon immer gerne das Kennwort abgefragt.
Nun geht das so - toll.
deine Funktion ist Klasse und eröffnet neue Möglichkeiten - irgendwie hatte ich das schon wieder vergessen oder damals übersehen.
Normalerweise nutze ich zwar auch immer über USERNAME den gleichen Benutzernamen wie der angemeldete und natürlich wird der grundsätzliche Zugang im Programm über Netzwerkregeln geregelt, aber bei einigen Menüpunkten hätte ich schon immer gerne das Kennwort abgefragt.
Nun geht das so - toll.
Gruß
Hubert
Hubert