ご使用の環境がKerberos用に正しくセットアップされていることを確認してください。これはkinitを実行することで実現できます。これが失敗した場合は、krb5.ini(Windows)またはkrb5.conf(linux)がドメインコントローラーを正しく指すように設定されていることを確認する必要があります。
Kerberosが機能していることを確認したら、以下に貼り付けたHttpClientのサンプルコードを使用できます。
時間同期、サポートされている暗号化タイプ、ドメインフォレスト間の信頼関係など、Kerberosが失敗する原因となる可能性のある多くの問題があることに注意してください。また、クライアントがサーバーとは別のボックスにあることを確認する価値があります。
HttpClientのダウンロードで利用できるサンプルコードを次に示します。JAAS構成とkrb5.confまたはiniが正しいことを確認する必要があります。
public class ClientKerberosAuthentication {
public static void main(String[] args) throws Exception {
System.setProperty("java.security.auth.login.config", "login.conf");
System.setProperty("java.security.krb5.conf", "krb5.conf");
System.setProperty("sun.security.krb5.debug", "true");
System.setProperty("javax.security.auth.useSubjectCredsOnly","false");
DefaultHttpClient httpclient = new DefaultHttpClient();
try {
httpclient.getAuthSchemes().register(AuthPolicy.SPNEGO, new SPNegoSchemeFactory());
Credentials use_jaas_creds = new Credentials() {
public String getPassword() {
return null;
}
public Principal getUserPrincipal() {
return null;
}
};
httpclient.getCredentialsProvider().setCredentials(
new AuthScope(null, -1, null),
use_jaas_creds);
HttpUriRequest request = new HttpGet("http://kerberoshost/");
HttpResponse response = httpclient.execute(request);
HttpEntity entity = response.getEntity();
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
System.out.println("----------------------------------------");
if (entity != null) {
System.out.println(EntityUtils.toString(entity));
}
System.out.println("----------------------------------------");
// This ensures the connection gets released back to the manager
EntityUtils.consume(entity);
} finally {
// When HttpClient instance is no longer needed,
// shut down the connection manager to ensure
// immediate deallocation of all system resources
httpclient.getConnectionManager().shutdown();
}
}
}