gpt4 book ai didi

java - 在 Java 中验证 NTLMv2 身份验证

转载 作者:行者123 更新时间:2023-11-30 11:43:43 25 4
gpt4 key购买 nike

所以我正在尝试追踪 NTLMv2 和 Java 的一个奇怪错误。似乎 NTLM 忽略了我在基于 Java 的身份验证过程中传入的任何信息,并在其他地方找到了这些信息。因此,NTLM 将在我的机器上进行身份验证,即使我提供的信息不正确,也不会在任何其他机器上运行,即使提供了正确的信息。如果相关,端点是 MOSS 2007 网络服务 API。

这是我用来进行身份验证的过程:

1) 传入目标站点和登录信息。

try {
JLists list = new JLists(siteUrl, DEFAULT_SP_USERNAME,
DEFAULT_SP_PASSWORD);
list.addList(name, description, 101);

} catch (Exception e) {
e.printStackTrace();
}


2)将默认 validator 设置为我自己的NTLMAuthenticator,创建服务 stub 并传入登录信息。

public JLists(String siteURI, String username, String password)
throws Exception {

String endpointURI = siteURI + "/_vti_bin/Lists.asmx";

Authenticator.setDefault(new NtlmAuthenticator(username, password));

port = sharePointListsAuth(username, password);
BindingProvider bp = (BindingProvider) port;
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
endpointURI);
}

private ListsSoap sharePointListsAuth(String userName, String password) throws Exception {
ListsSoap port = null;
if (userName != null && password != null) {
try {
service = new Lists();
port = service.getListsSoap();
((BindingProvider) port).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, userName);
((BindingProvider) port).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
} catch (Exception e) {
throw new Exception("Error: " + e.toString());
}
} else {
throw new Exception("Couldn't authenticate: Invalid connection details given.");
}
return port;
}


这也是 NTLMAuthenticator 类的副本:

import java.net.Authenticator;
import java.net.PasswordAuthentication;

class NtlmAuthenticator extends Authenticator {

private final String username;
private final char[] password;

public NtlmAuthenticator(final String username, final String password) {
super();
this.username = username;
this.password = password.toCharArray();
}

public PasswordAuthentication getPasswordAuthentication() {
return (new PasswordAuthentication (username, password));
}
}

3) 调用我的服务电话。我在这部分没有遇到任何问题,但如果有人需要代码,我也会发布。

我觉得 Java 以某种方式引用了我的 Active Directory 信息,并使用它来代替提供的信息,但我不知道什么时候会发生这种情况。

最佳答案

问题似乎与 Java 的“单点登录”功能有关。因为我在 Windows 机器上尝试 NTLM 身份验证,Java 有一个硬编码值,默认为当前帐户的登录信息,然后仅在失败时才使用 Java Authenticator。

如果不反编译 Java 源代码并自行修改该变量,似乎无法绕过此问题,但值得庆幸的是,在我的应用程序的最终情况下不需要这样做。

关于java - 在 Java 中验证 NTLMv2 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11162996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com