だから私はNTLMv2とJavaの奇妙なバグを突き止めようとしています。NTLMは、Javaベースの認証中に渡した情報を無視し、別の場所で情報を見つけているようです。このため、NTLMは、間違った情報を提供した場合でも自分のマシンで認証され、正しい情報が提供された場合でも他のマシンでは機能しません。エンドポイントは、関連する場合はMOSS2007Webサービス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)デフォルトのオーセンティケーターを自分のNTLMAuthenticatorに設定し、サービススタブを作成して、ログイン情報を渡します。
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がどういうわけか私のActiveDirectory情報を参照し、代わりに提供された情報を使用しているように感じますが、それがどの時点で発生するかわかりません。