java - 通过 native Java API 验证 Windows 用户凭据

标签 java windows validation credentials

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

当我从用户收集这些作为输入时,我想验证凭据是否正确。 Java 中是否有原生 API 可以帮助我验证 Windows 系统凭据?

我正在浏览 LoginContext 类,但看起来它只能用于 SSO 目的。 我收到的另一个建议是尝试启动一个需要这些凭据的进程,看看它是否有效。但这看起来不是正确的方法。

如果有人以前做过这个或者知道如何完成,请告诉我。

谢谢, 皮尤什

最佳答案

凭据是指用户的实际密码吗?然后您可以使用 LDAP 尝试连接到 Windows Active Directory。查看相关问题:Windows password Authentication with LDAP

一种更精细的方法是使用 native 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/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()); 
}

关于java - 通过 native Java API 验证 Windows 用户凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13070587/

相关文章:

java - Java中两个字符串的交集

Java 通用函数 : Define a set of classes generic object must be

Windows Server 2003 平台 SDK

python - 带 GUI 进度显示的文件下载器?

c# - 将页面重定向到不同的网络浏览器

javascript - 如何在 .NET 中一次性验证所有空文本

php - IPN 验证 ipnSimulator 无效

java - 如何可靠地判断 Java 中的套接字何时完成读取?

java - BufferedWriter写入文件

javascript - 有没有办法使使用 Javascript 的验证变得健壮?