ダウンストリーム 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 およびパスワードの提供または管理を必要とせずに、 シングル・サインオンを利用することができ、ダウンストリーム呼び出しにユーザー認証をシームレスに伝搬することができます。

アプリケーションのビルド時に、 JAX-RS セキュリティー・ハンドラーを 使用するダウンストリーム・サーバーへのユーザー認証を構成するには、以下の手順を使用します。
手順
タスクの結果
シングル・サインオンを使用してダウンストリーム呼び出しにユーザー認証をシームレスに伝搬できるように、 セル環境内の保護された JAX-RS リソースを定義しました。これにより、 アプリケーション内でのユーザー ID およびパスワードの提供または管理は必要なくなります。
例
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.
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;