如何在 java 中使用 Windows 凭据自动登录?

How automatically log in with Windows credentials in java?

我想在我的应用程序中自动验证 'active directory users',它们已登录到他们的 windows。 简而言之,我希望我的应用程序使用 windows 凭据进行 SSO。 **客户端是 React,后端是 Java 8 和 Spring 4.1.2,Spring 安全是 3.2.5。

我已经在我的应用程序中使用 spring LDAP 3.2.5 验证和搜索 'active directory users'。 但用户在使用浏览器时需要提交用户名和密码。

我读过 'Integrated Windows Authentication' (IWA)、'Kerberos'、'NTLM'。 我应该使用 NTLM 而不是 LDAP 吗??? 或者,我应该使用 Kerberos 吗??? 或者,我应该使用 ADFS ???

我应该在活动目录中为此配置什么吗??? **我无法在活动目录中配置任何东西

我应该在反应中以编程方式获取 windows 凭据并将其发送到服务器,然后从服务器将该凭据发送到活动目录以进行验证吗???

我不知道,但是,我应该在 'HTTP response' 到 'HTTP OPTION Request' 中说些什么来强制浏览器在下一个请求中设置 windows 凭据吗??

还有,感谢您的宝贵时间。

有几种方法可以做到这一点:

Windows 身份验证

这对用户来说是最好的,因为它是无缝登录。如果该网站受信任,则浏览器会自动将当前登录用户的凭据发送到该网站。

在这种情况下,网络服务器(Tomcat 在这种情况下)处理身份验证并将凭据传递给应用程序。如果您使用 IIS 和 Windows,设置会非常简单。但是 Tomcat 在 Linux 上有点难。您需要设置 kerberos,这需要在域上设置 SPN(服务主体名称)值,以便您的服务器在您的域上受信任以进行身份​​验证。 Tomcat 8 中的完整设置说明如下:Windows Authentication How-To

设置完成后,浏览器需要信任您的网站。如果您的站点被识别为 Intranet 站点,那么这应该是正确的。如果不是,则需要将您站点的域添加到客户端计算机上 Internet 选项中的受信任站点。这也可以做到via Group Policy。这将适用于 IE 和 Chrome。 Firefox 使用自己的 network.negotiate-auth.delegation-uris 设置。

表单验证

另一种方法是使用登录页面询问用户的用户名和密码,然后在 Java 应用程序代码中通过 LDAP 对他们进行身份验证。我假设您知道如何设置登录页面,所以您只需要知道如何验证凭据。您可以为该代码使用 answer here。该答案在控制台应用程序中包含代码,但您可以提取获取用户名和密码的代码并进行验证。

这可以说更容易设置,但用户要付出代价。