我需要存储 Windows 用户名和凭据,以便稍后运行一些需要这些凭据的进程。
当我收集这些作为用户的输入时,我想验证凭据是否正确。 Java 中是否有原生 api 可以帮助我验证 Windows 系统凭据?
我正在经历LoginContext
类,但看起来它只能用于 SSO 目的。
我收到的另一项建议是尝试启动一个需要这些凭据的流程,看看它是否有效或失败。但这看起来不是正确的方法。
如果有人以前做过此操作或知道如何完成此操作,请告诉我。
谢谢,
皮尤什
您所说的凭据是指用户的实际密码吗?然后您可以使用 LDAP 尝试连接到 Windows Active Directory。查看相关问题:使用 LDAP 进行 Windows 密码验证 https://stackoverflow.com/questions/3147403/windows-password-authentication-with-ldap
更复杂的方法是使用本机 Windows 调用,可能通过 JNA 平台:http://jna.java.net/javadoc/platform/com/sun/jna/platform/win32/package-summary.html http://jna.java.net/javadoc/platform/com/sun/jna/platform/win32/package-summary.html
有一个名为“waffle”的项目将其包装在一个更有用的库中,请参见例如中的logonUser函数https://github.com/dblock/waffle/blob/master/Source/JNA/waffle-jna/src/waffle/windows/auth/impl/WindowsAuthProviderImpl.java https://github.com/dblock/waffle/blob/master/Source/JNA/waffle-jna/src/waffle/windows/auth/impl/WindowsAuthProviderImpl.java。这直接与 win32 advapi32.dll 对话。
这还允许您在没有域的情况下为本地用户进行 Windows 身份验证。
EDIT:来自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());
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)