Hallo zusammen,
ich möchte für den Login in meiner Software die Windows Authentifizierung in einem Active Directory Netzwerk verwenden.
Ich verwende folgenden Code dafür (Funktioniert soweit auch):
Wenn ich nun aber einen Computer verwende, der nicht in der Domäne jedoch im selben Netzwerk ist, funktioniert das ganze nicht. Meine Frage: Welche Möglichkeiten habe ich um diese Problematik zu umgehen. Meiner Meinung nach müsste das ganze funktionieren, da ich z. B. auch auf einen Netzwerkpfad auf dem Server zugreifen kann und mich dort mit einem Domänen Benutzer authentifiziere auch wenn der PC nicht in der Domäne ist.
Ich vermute es liegt am LogonType "LOGON32_LOGON_INTERACTIVE" da der Benutzer sich dann schon DC authentifiziert haben muss. Jedoch finde ich keinen Parameter der auf meine Situation passt.
Ich bedanke mich vorab für eure Hilfe
Gruß
YouNoob
ich möchte für den Login in meiner Software die Windows Authentifizierung in einem Active Directory Netzwerk verwenden.
Ich verwende folgenden Code dafür (Funktioniert soweit auch):
VB.NET-Quellcode
- Private Declare Auto Function LogonUser Lib "advapi32.dll" (
- ByVal lpszUsername As String,
- ByVal lpszDomain As String,
- ByVal lpszPassword As String,
- ByVal dwLogonType As LogonType,
- ByVal dwLogonProvider As Integer,
- ByRef phToken As IntPtr) As Integer
- Private Declare Auto Function CloseHandle Lib "kernel32.dll" (ByVal hObject As IntPtr) As Boolean
- Public Enum LogonType As Integer
- LOGON32_LOGON_INTERACTIVE = 2
- LOGON32_LOGON_NETWORK = 3
- LOGON32_LOGON_BATCH = 4
- LOGON32_LOGON_SERVICE = 5
- LOGON32_LOGON_INTERACTIVE_TOKEN_OR_PASSWORD = 6
- LOGON32_LOGON_UNLOCK = 7
- LOGON32_LOGON_NETWORK_CLEARTEXT = 8
- LOGON32_LOGON_NEW_CREDENTIALS = 9
- End Enum
- ''' <summary>
- ''' Diese Funktion prüft ob ein angegebenes Windows Passwort und Benutzername richtig sind.
- ''' </summary>
- ''' <param name="Username">Der Windows Benutzername</param>
- ''' <param name="Password">Das Windows Passwort</param>
- ''' <param name="Domain">Optionale Domain</param>
- Public Function IsNTPasswordValid(ByVal Username As String, ByVal Password As String, Optional ByVal Domain As String = "") As Boolean
- Dim Token As New IntPtr
- LogonUser(Username, Domain, Password, LogonType.LOGON32_LOGON_INTERACTIVE, 0, Token)
- CloseHandle(Token)
- If Token.ToInt32 <> 0 Then Return True
- Return False
- End Function
- Private Sub B_login_Click(sender As Object, e As EventArgs) Handles B_login.Click
- If IsNTPasswordValid(tbxUsername.Text, tbxPassword.Text, "tbxDomain.Text") Then
- 'Weiter
- Else
- 'Zugangsdaten falsch
- End If
- End Sub
Wenn ich nun aber einen Computer verwende, der nicht in der Domäne jedoch im selben Netzwerk ist, funktioniert das ganze nicht. Meine Frage: Welche Möglichkeiten habe ich um diese Problematik zu umgehen. Meiner Meinung nach müsste das ganze funktionieren, da ich z. B. auch auf einen Netzwerkpfad auf dem Server zugreifen kann und mich dort mit einem Domänen Benutzer authentifiziere auch wenn der PC nicht in der Domäne ist.
Ich vermute es liegt am LogonType "LOGON32_LOGON_INTERACTIVE" da der Benutzer sich dann schon DC authentifiziert haben muss. Jedoch finde ich keinen Parameter der auf meine Situation passt.
Ich bedanke mich vorab für eure Hilfe
Gruß
YouNoob