我需要存储Windows用户名和凭据,以便稍后运行需要这些凭据的某些过程。
当我从用户那里收集这些信息作为输入时,我想验证凭据是否正确。 Java中是否有 native api可以帮助我验证Windows系统凭据?
我正在经历LoginContext
类,但看起来它只能用于SSO目的。
我收到的另一项建议是尝试启动一个需要这些凭据的过程,并查看它是否有效。但这似乎不是正确的方法。
请让我知道是否有人以前做过此事,或者对如何完成它有任何想法。
谢谢,
皮尤什
最佳答案
凭据是指用户的实际密码?然后,您可以使用LDAP尝试连接到Windows Active Directory。查看相关问题:Windows password Authentication with LDAP
一种更复杂的方法是使用本地Windows调用,也许通过JNA平台:http://jna.java.net/javadoc/platform/com/sun/jna/platform/win32/package-summary.html
有一个名为``华夫饼''的项目将其包装在一个更有用的库中,例如https://github.com/dblock/waffle/blob/master/Source/JNA/waffle-jna/src/waffle/windows/auth/impl/WindowsAuthProviderImpl.java中的logonUser函数。这直接与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());
}