通过本机Java API验证Windows用户凭据

use*_*433 9 java windows validation credentials

我需要存储Windows用户名和凭据,以便稍后运行一些需要这些凭据的进程.

当我将这些作为用户的输入收集时,我想验证凭据是否正确.Java中的原生api可以帮助我验证Windows系统凭据吗?

我正在LoginContext上课,但看起来它只能用于SSO目的.我收到的另一个建议是尝试启动一个需要这些凭据的过程,看看它是否有效.但这看起来并不合适.

如果有人之前已经这样做过,或者知道如何完成它,请告诉我.

谢谢,Piyush

Gee*_*nte 9

凭据,您的意思是用户的实际密码?然后,您可以使用LDAP尝试连接到Windows Active Directory.请参阅相关问题:Windows密码使用LDAP进行身份验证

更精细的方法是使用本机Windows调用,可能通过JNA平台:http://jna.java.net/javadoc/platform/com/sun/jna/platform/win32/package-summary.html

有一个名为'waffle'的项目将它包装在一个更有用的库中,例如参见https://github.com/dblock/waffle/blob/master/Source/JNA/waffle-jna/src/waffle/中的logonUser函数windows/auth/impl/WindowsAuthProviderImpl.java.这直接谈到win32 advapi32.dll.

这还允许您为没有域的本地用户执行Windows身份验证.

编辑: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()); 
}
Run Code Online (Sandbox Code Playgroud)