use*_*433 9 java windows validation credentials
我需要存储Windows用户名和凭据,以便稍后运行一些需要这些凭据的进程.
当我将这些作为用户的输入收集时,我想验证凭据是否正确.Java中的原生api可以帮助我验证Windows系统凭据吗?
我正在LoginContext上课,但看起来它只能用于SSO目的.我收到的另一个建议是尝试启动一个需要这些凭据的过程,看看它是否有效.但这看起来并不合适.
如果有人之前已经这样做过,或者知道如何完成它,请告诉我.
谢谢,Piyush
凭据,您的意思是用户的实际密码?然后,您可以使用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)
| 归档时间: |
|
| 查看次数: |
7558 次 |
| 最近记录: |