ダウンストリーム JAX-RS リソースの保護

ダウンストリームの Java™ API for RESTful Web Services (JAX-RS) リソースは、認証に BasicAuth 方式を構成して、LTPA JAX-RS セキュリティー・ハンドラーでユーザー認証にシングル・サインオンを利用することで、保護することができます。

始める前に

このタスクは、以下のステップが完了していることを前提としています。
  • JAX-RS アプリケーションをアプリケーション・サーバーにインストール済みである。
  • JAX-RS アプリケーションに対するセキュリティーが有効になっている。
  • ダウンストリーム JAX-RS アプリケーションがユーザー認証に基本認証 (BasicAuth) 方式を使用するよう構成することによって、Web コンテナー内で JAX-RS アプリケーションを保護している。

このタスクについて

JAX-RS リソースを構成する場合に、 新しい LTPA JAX-RS セキュリティー・ハンドラーを使用して、 ダウンストリーム・リソースの呼び出し時にシームレスに認証することができます。

ダウンストリームのセキュアな JAX-RS リソースを呼び出すとき、 呼び出し側アプリケーションはターゲット・リソースへの認証が要求されます。 ダウンストリーム・サーバー上のターゲット・リソースがセキュリティーのために BasicAuth 方式 を使用している場合、呼び出し側アプリケーションは JAX-RS リソースに対してシングル・サインオン (SSO) を 利用できます。シングル・サインオンの使用によって、認証されたコンテキスト はダウンストリーム呼び出しに順に伝搬していきます。LTPA ベースのセキュリティー・クライアント・ハンドラーを使用して、複数のサーバーに分散しているダウンストリーム・リソースに対する認証を行うことができます。

このシナリオを具体的に説明するため、セル内に 2 つのサーバーがあり、 これらのサーバーの両方に JAX-RS リソースをデプロイしたと想定します。server1 上 の 1 つのリソースから、server2 にデプロイされた別のリソース を呼び出す必要があるとします。server2 のリソースが認証に BasicAuth 方式を使用して保護されている場合は、LTPA JAX-RS セキュリティー・ハンドラーを使用してシングル・サインオンを利用し、ダウンストリーム呼び出しにユーザー認証をシームレスに伝搬します。この場合、アプリケーションでユーザー ID とパスワードを入力したり管理したりする必要はありません。

図 1. JAX-RS ダウンストリーム・リソースの保護認証に BasicAuth 方式を構成することと、LTPA JAX-RS セキュリティー・ハンドラー
を使用することによって、ダウンストリームのリソースを保護できます。

以下のステップを使用して、アプリケーションのビルド時に、ダウンストリーム・サーバーに対する JAX-RS セキュリティー・ハンドラーによるユーザー認証を構成します。

手順

  1. アプリケーションのビルド時に、LTPA ベースのセキュリティー・クライアント・ハンドラー LtpaAuthSecurityHandler を使用して、複数のサーバーに分散しているダウンストリーム・リソースへの認証を行います。
    • JAX-RS 1.1 で、LtpaAuthSecurityHandler クラスを使用する場合は、URL に HTTPS スキームを使用してターゲットとなるリソースを指定してください。また、ターゲット・アプリケーション が SSL に対応していることを確認してください。 LTPA Cookie などのユーザー・クレデンシャルを送信する際には、 SSL 接続を使用することを強くお勧めします。LtpaAuthSecurityHandler クラスで、セキュリティー・ハンドラーの setSSLRequired メソッドに false 値を指定して呼び出すことで、SSL の要求を明示的に無効にできます。デフォルト値は true です。
      yourLtpaAuthSecHandler.setSSLRequired(false);
    • JAX-RS 2.0 では、 com.ibm.ws.jaxrs.client.ltpa.handler クライアント・プロパティーを使用して、SSO Cookie を設定して値に true を指定します。
      ClientBuilder cb = ClientBuilder.newBuilder();
      
              Client c = cb.build();
              c.property("com.ibm.ws.jaxrs.client.ltpa.handler", "true");
              WebTarget t = c.target("http://" + serverIP + ":" + serverPort + "/" + moduleName + "/ComplexClientTest/ComplexResource");
              String res = t.path("echo1").path("test1").request().get(String.class);
              c.close();
              ret.append(res);
    JAX-RS 2.0 で Secure Sockets Layer (SSL) 機能を使用する場合、ssl-1.0 フィーチャーまたは appSecurity-2.0 フィーチャーを有効にする必要があります。LTPA トークン機能には、appSecurity-2.0 フィーチャーが必須です。
    注: ssl-1.0 フィーチャーは、appSecurity-2.0 フィーチャーのサブフィーチャーです。 jaxrsClient-2.0 フィーチャーと ssl-1.0 フィーチャーを有効にすると、appSecurity-2.0 フィーチャーが自動的に有効になります。
  2. セキュリティー・ハンドラーをハンドラー・チェーンに追加します。
  3. REST クライアント・インスタンスを作成します。
  4. 対話するリソース・インスタンスを作成します。
  5. リソース・アドレスを表す値に置き換えます。

タスクの結果

ダウンストリーム・リソースが呼び出されたときに、シングル・サインオンを使用してダウンストリーム呼び出しにユーザー認証をシームレスに伝搬できるように、 保護された JAX-RS リソースを定義しました。これにより、 アプリケーション内でのユーザー ID およびパスワードの提供または管理は必要なくなります。

JAX-RS 1.1 で、以下のコード・スニペットは、JAX-RS クライアントの一部としてパッケージ化されているこのセキュリティー・ハンドラーの使用方法を示しています。
import org.apache.wink.client.Resource;
 import org.apache.wink.client.RestClient;
 import org.apache.wink.client.ClientConfig;
 import org.apache.wink.client.handlers.LtpaAuthSecurityHandler;

 ClientConfig config = new ClientConfig();
 LtpaAuthSecurityHandler secHandler = new LtpaAuthSecurityHandler();
 
 // Add this security handler to the handlers chain.
 config.handlers(secHandler);

 // Create the REST client instance. 
 RestClient client = new RestClient(config);

 // Create the resource instance that you want to interact with. 
 // Substitute a value representing your resource address
 resource =  
  client.resource("http://localhost:8080/path/to/resource");

// Now you are ready to begin calling your resource.
JAX-RS 2.0 で、以下のコード・スニペットは、JAX-RS クライアントの一部としてパッケージ化されているこのセキュリティー・ハンドラーの使用方法を示しています。
ClientBuilder cb = ClientBuilder.newBuilder();
Client c = cb.build();
c.property("com.ibm.ws.jaxrs.client.ltpa.handler", "true");

String res = "";
res = c.target("http://" + serverIP + ":" + serverPort + "/" + moduleName + "/rest/ltpa")
                            .request()
c.close();
return res;

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_impl_securejaxrs_downstreamresource
ファイル名: twbs_jaxrs_impl_securejaxrs_downstreamresource.html