REST コマンドのための認証

REST コマンドを実行するための認証方法は、サーバーのセットアップ方法と、そのコマンドの実行に使用するツールによって異なります。
注: REST コマンドの使用には、Web インターフェースを使用するのと同じアクセス権が必要です。アクセス権については、役割とアクセス権を参照してください。

ユーザー名およびパスワードでの認証

REST コマンドの認証の最も簡単な方法は、ユーザー名とパスワードを使用する方法です。例えば、curl プログラムを使用している場合、次のコードのように、コマンドにユーザー名とパスワードを指定することができます。
curl -k -u jsmith:passwd
  https://myserver.example.com:8443/cli/application/info
  ?application=JPetStore

セッション鍵での認証

一部のクライアントでは、サーバーへの接続にセッション鍵が必要です。セッション鍵を使用するには、通常の手順でサーバーにログインしてください。次に、サーバーとの間のセッションでセッション鍵を取得し、そのセッション鍵を他のツールで使用します。

セッション鍵を取得するには、通常の手順でサーバーにログインします。その後、Web ブラウザーで UCD_SESSION_KEY という名前のヘッダーの値を探します。その名前の cookie を探すことも、その Web ページに関連付けられているヘッダーのリストを調べることもできます。この情報を確認する方法は、使用しているブラウザーによって異なります。詳細については、使用中の Web ブラウザーの資料を参照してください。

これで、そのセッション鍵を使用して REST コマンドのための認証を行うことができます。例えば、要求に次のヘッダーを追加します。
UCD_SESSION_KEY:sessionKey
sessionKey には UCD_SESSION_KEY cookie の値を使用してください。

スクリプトおよびプログラムでの認証

REST コマンドは、様々なプログラミング言語およびスクリプト言語で呼び出すことができます。
以下は、要求ヘッダーにパスワードを追加することで認証を行う Python スクリプトの例です。
#!/usr/bin/env python

import urllib2
import json
import base64
import sys

if not len(sys.argv) == 3:
  print 'usage: script <username> <password>'
  exit(1)

username = sys.argv[1]
password = sys.argv[2]

epass = base64.b64encode(username + ':' + password)
print 'base64 encoded: ' + epass
baseUrl = 'ucdeploy.example.org:8443'

url = 'https://' + baseUrl + '/cli/application/info' + '?application=JPetStore'

opener = urllib2.build_opener(urllib2.HTTPHandler)
req = urllib2.Request(url)
req.add_header('Authorization', 'Basic '+epass)
req.get_method = lambda: 'GET'

resp = opener.open(req)
print resp.read()

Groovy スクリプトでの認証

Groovy スクリプトでの 認証の例については、 http://devblog.laraziosi.org/extensibility/index.php/devops-articles/6-getting-started-with-the-ibm-urbancode-deploy-rest-api-and-groovyを参照してください。

Java クラスでの認証

以下の Java™ コードは、ユーザー名とパスワードでの認証の簡単な例です。このコードはすべての証明書を受け入れますが、受け入れる証明書を制御するように変更することもできます。

この例では、HttpComponents-Util.jar および uDeployRestClient.jar の各 JAR ファイルが必要です。HttpComponents-Util.jar ファイルは、サーバー上の opt フォルダーにあります。uDeployRestClient.jar ファイルは、UrbanCode Deploy アプリケーション・プラグインなどの、様々なコア・プラグインにあります。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.log4j.Logger;

import com.urbancode.commons.httpcomponentsutil.HttpClientBuilder;

public class RESTExample {

  public static void main(String[] args) {

  // suppress log4j messages from UCD library
  Logger.getRootLogger().setLevel(org.apache.log4j.Level.OFF);

  HttpClientBuilder clientBuilder = new HttpClientBuilder();
  clientBuilder.setUsername("admin");
  clientBuilder.setPassword("admin");

  // for SSL enabled servers, accept all certificates
  clientBuilder.setTrustAllCerts(true); 
  DefaultHttpClient client = clientBuilder.buildClient();

  try {
    HttpGet request = new HttpGet(new URI(
      "https://ucdeploy.example.org:8443/cli/application/info?application=JPetStore"));

    try {
      HttpResponseresp = client.execute(request);
      BufferedReaderbr = new BufferedReader ( 
        new InputStreamReader(resp.getEntity().getContent()));

      String currentLine = new String();
      while ((currentLine = br.readLine()) != null){
        System.out.print(currentLine);
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  } catch (URISyntaxException e) {
    e.printStackTrace();
  }

  }

}

サーバー証明書のインポート

デフォルトのサーバー証明書は未署名です。ツールによっては、署名のない証明書ではサーバーに接続しない設定がデフォルトになっています。自己署名証明書でサーバーにアクセスするには、非セキュアで接続するようツールを設定するか、クライアントに証明書をインポートします。クライアントに証明書をインポートするには、以下の手順に従ってください。
  1. サーバー証明書をファイルにエクスポートします。
    1. テキスト・エディターを使用し、IBM® UrbanCode Deploy サーバーをホストするコンピューターで server.xml ファイルを開きます。デフォルトでは、このファイルは server_install/opt/tomcat/conf/server.xml にあります。デフォルトのサーバー・インストール・ディレクトリーは、 Linux 上では /opt/ibm-ucd/server、Windows 上では C:¥Program Files¥ibm-ucd¥server です。
    2. server.xml ファイルで以下のコード行を探し、keystoreFilekeystorePass の両属性の値をメモします。
      sslProtocol="TLS"
      keystoreFile="conf/tomcat.keystore"
      keystorePass="changeit" />
    3. コマンド行ウィンドウで次のコマンドを実行します。
      keytool -v -list -keystore keyStoreFileName
      keyStoreFileName には、server.xml ファイルにある keystoreFile 属性の名前を使用してください。コマンドでパスワードが求められたら、keystorePass 属性の値を指定します。デフォルト値は changeit です。
    4. コマンドの結果から、サーバーの別名を探します。例えば、コマンドの結果は次のコードのようになります。
      Keystore type: JKS
      Keystore provider: SUN
      
      Your keystore contains 1 entry
      
      Alias name: server
      Creation date: Mar 19, 2014
      Entry type: PrivateKeyEntry
      このコードでは、別名は server です。
    5. 次のコマンドを実行して証明書をファイルにエクスポートし、パスワードを再度指定します。
      keytool -exportcert 
        -alias serverAlias 
        -keystore keyStoreFileName 
        -storetype jks 
        -file server.cert
      serverAlias にはサーバーの別名を使用してください。
  2. server.cert ファイルをクライアント・コンピューターにコピーします。
  3. server.cert ファイルをクライアント・コンピューターの鍵ストアにインポートします。
    1. クライアント・コンピューターのコマンド行ウィンドウで次のコマンドを実行し、クライアントの鍵ストアのパスワードを指定します。デフォルトは changeit です。
      jreLocation¥jre¥bin¥keytool.exe -importcert 
        -alias serverAlias
        -file tomcat.cert 
        -storetype jks 
        -keystore jreLocation¥jre¥lib¥security¥cacerts
      jreLocation には、JRE または JDK のロケーションを使用します。
これで、この JRE または JDK を使用する一部のツールがサーバー証明書を受け入れるようになりました。 curl など、他の一部のツールは、署名されていないサーバー証明書を依然として受け入れない場合もあります。 この問題を解決するには、サーバーの署名済み証明書をセットアップしてください。

フィードバック