6

NTLMとsharepoint2010を認証し、ApacheCommonsを使用してHTTPRESTWebサービスを送信するlinux\java6クライアントがありますHttpClient

NTLMでこれを行うことはできますが、同じREST APIを使用して、Kerberos認証を使用するSharePoint2010にアクセスしたいと思います。

Kerberos共有ポイントを使用してRESToverHTTPを認証および送信する方法の例はありますか?(できればを使用してHttpClient

ps SharePointコードにアクセスできませんが、SharePoint管理者構成にアクセスできます。これは、私がNTLMで認証する方法です。

HttpClient httpClient = new HttpClient(new SimpleHttpConnectionManager(true));
AuthPolicy.registerAuthScheme(AuthPolicy.NTLM, JCIFS_NTLMScheme.class);
String  localHostName = Inet4Address.getLocalHost().getHostName();
authscope = new AuthScope(uri.getHost(), AuthScope.ANY_PORT);
httpClient.getState().setCredentials(authscope,new NTCredentials(
             getUsername(),getPassword(),localHostName,getDomain()));

// after the initial ntlm auth I can call my REST service with "httpClient.executeMethod" 

int status = httpClient.executeMethod(new GetMethod(accessURI + "/sitecollection/info"));
4

1 に答える 1

3

ご使用の環境が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();
        }
    }

}
于 2012-05-29T13:49:15.223 に答える