2012-10-25 3 views
8

Ich muss den Windows-Benutzernamen und die Anmeldeinformationen speichern, um später einen Prozess auszuführen, der diese Anmeldeinformationen erfordert.Validieren von Windows-Benutzeranmeldeinformationen über native Java-APIs

Wenn ich diese als Eingaben vom Benutzer sammle, möchte ich überprüfen, ob Anmeldeinformationen korrekt sind oder nicht. Gibt es eine native API in Java, mit der ich die Anmeldeinformationen für Windows-Systeme überprüfen kann?

Ich ging durch LoginContext Klasse aber sieht aus wie es nur für SSO Zweck verwendet werden kann. Ein anderer Vorschlag, den ich erhielt, bestand darin, einen Prozess zu starten, der diese Anmeldeinformationen erfordert, um zu sehen, ob er funktioniert oder nicht. Aber das sieht nicht richtig aus.

Bitte lassen Sie mich wissen, wenn jemand dies schon einmal getan hat oder eine Idee, wie es zu erledigen ist.

Danke, Piyush

+0

ist dies eine Domäne/Benutzername Satz von Anmeldeinformationen Sie wollen? – ChadNC

+0

Ja, ich werde die Anmeldeinformationen vom Benutzer erhalten. Ich muss nur überprüfen, ob sie korrekt sind. Es kann sowohl ein Benutzer einer lokalen Maschine als auch ein LDAP-Benutzer sein. Ich bin mehr besorgt über den lokalen Systembenutzer wie Administrator. – user1774433

Antwort

7

von Anmeldeinformationen, meinen Sie das aktuelle Passwort des Benutzers? Dann können Sie LDAP verwenden, um eine Verbindung zu einem Windows Active Directory herzustellen. Siehe ähnliche Frage: Windows password Authentication with LDAP

Ein aufwendiger Weg, dies zu tun ist, um Anrufe native Windows zu verwenden, vielleicht über die JNA-Plattform: http://jna.java.net/javadoc/platform/com/sun/jna/platform/win32/package-summary.html

Es gibt ein Projekt namens ‚Waffel‘, dass dies in einer nützlichen Bibliothek eingewickelt, siehe z die LogonUser-Funktion in https://github.com/dblock/waffle/blob/master/Source/JNA/waffle-jna/src/waffle/windows/auth/impl/WindowsAuthProviderImpl.java. Dies spricht direkt mit der win32 advapi32.dll.

Dies ermöglicht Ihnen auch, Windows-Authentifizierung für lokale Benutzer, ohne eine Domäne zu tun.

EDIT: Vollarbeitscode von OP

import com.sun.jna.platform.win32.Advapi32; 
import com.sun.jna.platform.win32.Kernel32; 
import com.sun.jna.platform.win32.WinBase; 
import com.sun.jna.platform.win32.WinNT.HANDLEByReference; 

HANDLEByReference phUser = new HANDLEByReference() 
if(! Advapi32.INSTANCE.LogonUser("administrator", InetAddress.getLocalHost().getHostName(), 
    "password", WinBase.LOGON32_LOGON_NETWORK, WinBase.LOGON32_PROVIDER_DEFAULT, phUser)) 
{ 
    throw new LastErrorException(Kernel32.INSTANCE.GetLastError()); 
} 
+0

Es muss kein Active Directory-Benutzer sein. Es kann auch lokaler Benutzer sein. z.B. Administrator – user1774433

+0

Danke Greyfairer, Ich bin in der Lage, lokale Systembenutzer Anmeldeinformationen mit JNA zu überprüfen. Folgendes ist das Code-Snippet, das ich schrieb, das für meine Anforderung funktioniert: – user1774433

+1

Kann nicht formatieren: :) 'import com.sun.jna.platform.win32.Advapi32; importieren com.sun.jna.platform.win32.Kernel32; importieren com.sun.jna.platform.win32.WinBase; import com.sun.jna.platform.win32.WinNT.HANDLEByReference; HANDLEByReference phUser = new HANDLEByReference() \t if (! Advapi32.INSTANCE.LogonUser ("Administrator", InetAddress.getLocalHost(). GetHostName(), "Passwort", WinBase.LOGON32_LOGON_NETWORK, \t WinBase.LOGON32_PROVIDER_DEFAULT, phUser)) { \t neue LastErrorException werfen (Kernel32.INSTANCE.GetLastError()); \t} ' – user1774433