Apache/Jakarta HttpClient 4.1.1 を使用して、指定された資格情報を使用して任意の Web ページに接続しようとしています。これをテストするために、一度に 1 つの認証モードのみがアクティブな開発マシンに IIS 7.5 の最小限のインストールを行いました。基本認証は正常に機能しますが、ログインしようとするとダイジェストと NTLM が 401 エラー メッセージを返します。コードは次のとおりです。
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpget = new HttpGet("http://localhost/");
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY,
new NTCredentials("user", "password", "", "localhost"));
if (!new File(System.getenv("windir") + "\\krb5.ini").exists()) {
List<String> authtypes = new ArrayList<String>();
authtypes.add(AuthPolicy.NTLM);
authtypes.add(AuthPolicy.DIGEST);
authtypes.add(AuthPolicy.BASIC);
httpclient.getParams().setParameter(AuthPNames.PROXY_AUTH_PREF,
authtypes);
httpclient.getParams().setParameter(AuthPNames.TARGET_AUTH_PREF,
authtypes);
}
localContext.setAttribute(ClientContext.CREDS_PROVIDER, credsProvider);
HttpResponse response = httpclient.execute(httpget, localContext);
System.out.println("Response code: " + response.getStatusLine());
Fiddler で気づいたことの 1 つは、Firefox から送信されるハッシュと HttpClient から送信されるハッシュが異なることです。おそらく、IIS 7.5 は HttpClient が提供するよりも強力なハッシュを期待しているのではないでしょうか? 何か案は?これが NTLM で動作することを確認できれば幸いです。ダイジェストもあればいいのですが、必要に応じてダイジェストがなくても生活できます。