/// <summary> /// Überprüft Windows-Anmeldeinformationen. /// </summary> /// <param name="username">Windows-Benutzername</param> /// <param name="password">Windows-Kennwort</param> /// <param name="domain">Windows-Computername oder Active Directory-Domäne</param> /// <returns>Wahr, wenn die Anmeldung erflgreich war, ansonsten Falsch</returns> private bool ValidateWindowsCredentials(string username, string password, string domain) { if (MonoCheck.IsRunningOnMono && MonoCheck.IsUnixOS) { return(false); // Windows-Authentication isn´t supported on Linux or Mac. } IntPtr token = IntPtr.Zero; try { bool success = WindowsSecurityTools.LogonUser( username, domain, password, WindowsSecurityTools.LogonType.LOGON32_LOGON_NETWORK, WindowsSecurityTools.ProviderType.LOGON32_PROVIDER_DEFAULT, out token) != 0; if (success && token != IntPtr.Zero) { WindowsIdentity identity = new WindowsIdentity(token); return(identity.IsAuthenticated && !(identity.IsGuest || identity.IsAnonymous)); } return(false); } finally { WindowsSecurityTools.CloseHandle(token); } }
/// <summary> /// Überprüft Windows-Anmeldeinformationen. /// </summary> /// <param name="username">Windows-Benutzername</param> /// <param name="password">Windows-Kennwort</param> /// <param name="domain">Windows-Computername oder Active Directory-Domäne</param> /// <returns>Wahr, wenn die Anmeldung erflgreich war, ansonsten Falsch</returns> private bool ValidateWindowsCredentials(string username, string password, string domain) { // Variable für Windows-Sicherheitstoken IntPtr token = IntPtr.Zero; try { // Windows-Anmeldung durchführen bool success = WindowsSecurityTools.LogonUser( username, domain, password, WindowsSecurityTools.LogonType.LOGON32_LOGON_NETWORK, WindowsSecurityTools.ProviderType.LOGON32_PROVIDER_DEFAULT, out token) != 0; // Wenn die Anmeldefunktion erfolgreich verarbeitet wurde ... if (success && token != IntPtr.Zero) { // Authentifizierte Identität abfragen WindowsIdentity identity = new WindowsIdentity(token); // Wahr zurückgeben, wenn die Identität weder ein Gast noch anonym ist return(identity.IsAuthenticated && !(identity.IsGuest || identity.IsAnonymous)); } // Falsch zurückgeben return(false); } finally { // Unverwalteten Hande auf den Sicherheitstoken schließen WindowsSecurityTools.CloseHandle(token); } }