Liberty トークンプロファイルを使用した Web サービスのセキュリティー保護
最終更新日: 2006 年 11 月 14 日
寄稿者 Sherry Barkodar、保守管理者 Annette Wegscheider
NetBeans Enterprise Pack 5.5 には、セキュリティー保護されたアイデンティティー対応 Web サービスのクライアントとプロバイダの開発を開始するのに必要なすべての実行環境が付属しています。これらの実行環境には、次のものがあります。
- Sun Java System Application Server Platform Edition 9 Update 1
- Sun Java System Access Manager 7.1 および Policy Agent 2.2 for Web Services
このチュートリアルでは、アイデンティティーベースの Web サービスプロバイダ (WSP) を企業または組織内でセキュリティー保護する方法について説明します。Web サービスプロバイダの Web サービス相互作用に対する Web サービスクライアント内のアイデンティティーは、次のように特徴付けることができます。
- Web サービスプロバイダへアクセスする Web サービスクライアントのアイデンティティー
- Web サービスプロバイダに接続するためにWeb サービスクライアントをアクセスするエンドユーザーのアイデンティティー
Netbeans Enterprise Pack は、2 つのカテゴリに分類されるトークンプロファイルのサポートを提供します。
- Web サービスクライアントと Web サービスプロバイダとの相互作用に純粋に使用される、Basic Security Profile (WSI) トークン。この場合、Web サービスクライアントのアイデンティティー情報だけが Web サービスプロバイダに渡されます。
- Liberty Security トークンプロファイルは、エンドユーザーのアイデンティティーを取得する必要がある場合に使用されます。ここでのエンドユーザーは、WSC を使用して WSP にサービスを要求するユーザーです。IDE は、WSP のためのエンドユーザーの認証と、WSP Java EE Web サービスのセキュリティーコンテキストをエンドユーザーのセキュリティーコンテキストに設定することを自動化します。
このチュートリアルでは、IDE が Liberty トークンプロファイルを使用して呼び出し元のアイデンティティーをカレンダーサービスに送信する方法について説明します。
前提条件
このチュートリアルでは、Java 言語、Java プラットフォーム、および NetBeans IDE の基本的な知識またはプログラミング経験があることを前提としています。
システム要件
これらのチュートリアルでは、『NetBeans Enterprise Pack 5.5 リリースノート』の「システム要件」の項に指定された要件を、システムが満たしていることが前提になります。
チュートリアルに必要なソフトウェア
開始する前に、次のソフトウェアをコンピュータにインストールしてください。
- NetBeans IDE 5.5 と NetBeans Enterprise Pack 5.5 (ダウンロード)
- このチュートリアルの配備の手順を実行するには、Sun Java System Application Server Platform Edition 9 Update 1 が必要です。この Application Server は、NetBeans Enterprise Pack 5.5 のダウンロードに付属しています。
目次
ページの先頭へ
チュートリアル環境の構成
- IDE を起動します。
- Sun Java System Application Server が IDE 内で構成されていることを確認するには、「実行時」タブをクリックして、「サーバー」ノードを展開します。
- 「サーバー」ノードに「Sun Java System Application Server 9」が含まれていない場合、「アプリケーションサーバーの追加」にある手順に従います。
- 「実行時」ウィンドウで、「サーバー」ノードを展開し、「Sun Java System Application Server 9」ノードを右クリックして、ポップアップメニューから「開始」を選択します。
「出力」ウィンドウに次のメッセージが表示されるまで待ちます。
アプリケーションサーバーの起動は完了しました。
Sun Java System Application Server が実行されている場合、「Sun Java System Application Server 9」ノードに緑色の矢印のバッジが表示されます。
注: 「開始」オプションを使用できない場合、Sun Java System Application Server はすでに実行されています。
ページの先頭へ
チュートリアルプロジェクトの作成
チュートリアルプロジェクトには、CalendarServer と CalendarClient の 2 つがあります。Calendar アプリケーションは、カレンダーイベントを作成するための簡単な実装です。カレンダーイベントの静的マップを維持し、必要に応じてカレンダーイベントを返します。
CalendarServer プロジェクトを作成するには、次の手順に従います。
- IDE のメインメニューから、「ファイル」>「新規プロジェクト」を選択します。
- 「カテゴリ」リストで、「サンプル」ノードを展開し、「アイデンティティー Blueprints」ノードを選択します。
- 「プロジェクト」リストで「カレンダサービス」を選択します。
- 「次へ」をクリックします。
- デフォルトのプロジェクト名 (CalendarServer) をそのまま使用し、プロジェクトの場所を任意で変更します。
- 「完了」をクリックします。
進行状況ダイアログボックスが表示されたあと、「CalendarServer」プロジェクトノードが「プロジェクト」ウィンドウに表示されます。
CalendarClient プロジェクトを作成するには、次の手順に従います。
- IDE のメインメニューから、「ファイル」>「新規プロジェクト」を選択します。
- 「カテゴリ」リストで、「サンプル」ノードを展開し、「アイデンティティー Blueprints」ノードを選択します。
- 「プロジェクト」リストで、「カレンダクライアント」を選択します。
- 「次へ」をクリックします。
- プロジェクト名 (CalendarClient) とプロジェクトの場所のデフォルト値をそのまま使用します。
- 「完了」をクリックします。
進行状況ダイアログボックスが表示されたあと、「CalendarClient」プロジェクトノードが「プロジェクト」ウィンドウに表示されます。
ページの先頭へ
Liberty セキュリティー機構を使用した、Web サービスのセキュリティー保護
プロジェクトを配備する前に、Liberty セキュリティー機構の 1 つを使用して Web サービスをセキュリティー保護する必要があります。このシナリオでは、Liberty Bearer Token セキュリティープロファイルを使用します。
Web サービスプロバイダを構成するには、次の手順に従います。
- 「プロジェクト」ウィンドウで、「CalendarServer」プロジェクトノードおよび「Web サービス」ノードを展開します。
- 「Web サービス」ノードの下で、「CalendarService」ノードを右クリックし、ポップアップメニューから「Web サービス属性を編集」を選択します。
Web サービスプロバイダのセキュリティーを構成できるように、「セキュリティー」タブが表示された状態でWeb サービス属性エディタが開きます。
- 「メッセージレベルのセキュリティーを有効化」チェックボックスを選択します。
- 「セキュリティー機構」の下の「要求」ドロップダウンリストから、「LibertyBearerToken」を選択します。

- 「了解」をクリックします。
Web サービスクライアントを構成するには、次の手順に従います。
- 「プロジェクト」ウィンドウで、「CalendarClient」ノードと「Web サービス参照」ノードを展開します。
- 「Web サービス参照」ノードの下で「CalendarService」ノードを右クリックして、ポップアップメニューから「Web サービス属性を編集」を選択します。
Web サービスクライアントのセキュリティーを構成できるように、「セキュリティー」タブが表示された状態でWeb サービス属性エディタが開きます。
- 「メッセージレベルのセキュリティーを有効化」チェックボックスを選択します。
- 「セキュリティー機構」の下の「要求」ドロップダウンリストから、「LibertyDiscoverySecurity」を選択します。
- 応答を確認するには、「応答」チェックボックスを選択します。
- 「既存の証明書設定」の下で、「デフォルトのキーストアを使用」チェックボックスを選択したままにしておきます。

- 「了解」をクリックします。
ページの先頭へ
プロジェクトの配備と実行
- 「プロジェクト」ウィンドウで「CalendarServer」プロジェクトノードを右クリックし、「プロジェクトを配備」を選択します。
IDE では次のことが行われます。
- アプリケーションサーバーが起動していない場合、自動的に起動されます。
- CalendarServer プロジェクトを構築します。
構築結果が「出力」ウィンドウに表示されます。
- Application Server に server.war を配備します。
- 「プロジェクト」ウィンドウで「CalendarClient」プロジェクトノードを右クリックし、「プロジェクトを実行」を選択します。
IDE では次のことが行われます。
- CalendarClientプロジェクトを構築します。
構築結果が「出力」ウィンドウに表示されます。
- Application Server に client.war を配備します。
- アプリケーションがブラウザに開きます。
- 「ユーザー名」フィールドと「パスワード」フィールドに jsmith と入力します。

- 「ログイン」をクリックします。
アプリケーションの「ようこそ」ページが開きます。
- ドロップダウンリストから「jsmith」を選択し、データフィールドにデータを入力するか、デフォルトをそのまま使用します。

- 「Get events」をクリックします。
jsmith のカレンダーが送信されます。

ページの先頭へ
クライアントアプリケーション配備記述子の調査
- 「プロジェクト」ウィンドウで、「CalendarClient」プロジェクトノードを展開し、「構成ファイル」ノードを展開します。
- 「sun-web.xml」ノードを右クリックし、「編集」を選択します。
3 行目を確認します。
<sun-web-app error-url="" httpservlet-security-provider="AMHttpProvider">
15 行目からは次のようになります。
<message-security-binding auth-layer="SOAP" provider-id="AMClientProvider">
<message-security>
<message/>
<request-protection auth-source="content"/>
<response-protection auth-source="content"/>
</message-security>
</message-security-binding>
Web サービスが Liberty トークンプロファイルによってセキュリティー保護され、CalendarServer に接続することが、これらのプロバイダによって保証されていることを確認します。
次の図は、Web サービスクライアント (WSC) から、アイデンティティープロバイダ (IDP) と Discovery Service (Disco) を介して Web サービスプロバイダ (WSP) に至る要求のワークフローを示しています。この WSC アクセスにエンドユーザーが関与していることと、このセキュリティーのコンテキストで最終的に WSP に送信されるのはユーザーのアイデンティティーであることに注意してください。

上の図の HTTPProvider は、Sun 配備記述子内で構成されている AMHttpProvider です。同様に、SOAPProvider は、Sun 配備記述子内で構成されている AMClientProvider です。IDE からの配備の一部として、WSP は最初に検出サービスに登録されます。そのあと、WSC が WSP に要求を送信しようとすると、WSC にアクセスしているユーザーが Access Manager によって最初に正常に認証され、検出サービスとの対話が行われます。それから、ワークフローが継続して WSP の資格が取得され、WSP に要求が送信されます。要求を受信すると、WSP の構成済み Liberty SOAPProviders がトークンの検証を実行して、WSC 側の認証済みユーザーのサブジェクトになるようにサブジェクトを設定します。これで、WSP でのビジネスロジックが進行します。
ページの先頭へ
ログファイルの操作
この節の指示は省略可能です。これらは、ログファイルで変更を確認したいユーザー向けです。
- 次の手順に進む前に、最高のログレベルを有効にします。
「Application Server でのセキュリティーレベルの変更」の指示に従ってください。
- 「プロジェクト」ウィンドウで「CalendarClient」プロジェクトノードを右クリックし、ポップアップメニューから「プロジェクトを実行」を選択します。
- 次のディレクトリ内の Application Server ログファイル (server.log) を開きます。<アプリケーションサーバーのインストールディレクトリ>\domains\domain1\logs.
インストール時にデフォルトをそのまま使用した場合は、C:\Sun\AppServer\domains\domain1\logs ディレクトリになります。
- ログファイル内の変化を確認するには、ServerAuthContext.validateRequest と ClientAuthContext.secureRequest を探します。
ログファイルの修正部分のサンプルは、次のリンク先で入手できます。
ページの先頭へ
その他の構成作業
この節では、実行する可能性のある、その他の構成作業について説明します。
Application Server の追加
- 「実行時」ウィンドウで「サーバー」ノードを右クリックし、ポップアップメニューから「サーバーを追加」を選択します。
「サーバーインスタンスを追加」ダイアログが開きます。
- 「サーバーを選択」ページで、「サーバー」ドロップダウンリストから「Sun Java System Application Server」を選択します。
- (省略可能)「名前」フィールドで、IDE 内でこのサーバーを識別するために使用する任意の名前を入力するか、デフォルト値のままにします。
- 「次へ」をクリックします。
「プラットフォームフォルダの場所」ページが開きます。
- 「プラットフォームの場所」フィールドで「参照」ボタンを使用して移動し、Application Server のインストール場所を選択します。
インストール時にデフォルト値のままにした場合、インストール場所は C:\Sun\Appserver です。
- 「ローカルデフォルトドメインの登録」ラジオボタンを選択します。
- 「次へ」をクリックします。
- ドメインの管理者のユーザー名とパスワードを入力します。
インストール時にデフォルト値のままにした場合、ユーザー名は admin で、パスワードは adminadmin です。
- 「完了」をクリックします。
ページの先頭へ
Access Manager インストールの構成の確認
- アプリケーションサーバーを起動します。
- 「実行時」ウィンドウで、「Sun Java System Access Manager」ノードを展開します。
- 「デフォルトのインスタンス」ノードを右クリックして、「管理コンソールを表示」を選択します。
新しいブラウザセッションが起動され、次の URL が指定されます。http://localhost:8080/amserver。
「Sun Java System Access Manager ログイン」ページが開き、Access Manager サーバーが実行中であることが表示されます。
ページの先頭へ
ポート 8080 にインストールされていない Application Server の構成情報
Sun Java System Application Server のインストールを 8080 以外のポートで実行した場合、次に示す追加の構成手順を実行してください。
- 「プロジェクト」ウィンドウで「CalendarClient」>「Web ページ」>「WEB-INF」および「wsdl」を展開し、エディタで CalendarService.wsdl ファイルを開きます。
- 「ソース」ボタンをクリックし、ファイルのソースビューに切り替えます。
- ファイルの下方までスクロールして、次の行を探します。
<soap:address location="http://localhost:8080/CalendarService/CalendarService"/>
- 8080 の値を、Application Server がインストールされているポート番号に置き換えます。
- 変更を保存して、ファイルを閉じます。
ページの先頭へ
Application Server でのセキュリティーレベルの変更
- 「実行時」ウィンドウで、「Sun Java System Application Server 9」ノードを右クリックし、「管理コンソールを表示」を選択します。
- ユーザー名に admin と入力し、パスワードに adminadmin と入力します。
- 左側のナビゲーションフレームで「Application Server」のリンクをクリックします。
- 右側のフレームで「ログ」タブをクリックし、「ログレベル」タブをクリックします。

- ページの下方までスクロールして、「セキュリティー」を「最高」に設定します。

- 「保存」ボタンをクリックして、ログアウトします。
ページの先頭へ
LibertySAMLToken プロファイルのサポートの構成
Liberty サンプルに関して、NetBeans Enterprise Pack は次の 3 つのトークンプロファイルをサポートします。LibertyBearerToken、LibertyX509Token、および LibertySAMLToken。LibertySAMLToken プロファイルを使用する場合、次の構成手順を手動で実行してください。
- アプリケーションサーバーが実行中であることを確認します。
- 新しいブラウザセッションを起動し、次の URL を指定します。http://localhost:8080/amserver。
- ログイン画面で、次の値を使用してログインします。
ユーザー: amadmin
パスワード: admin123 (デフォルトパスワード)。
- Web サービスページで、「Web サービス」タブをクリックしてから、「ディスカバリサービス」タブをクリックします。
- ページの下方までスクロールし、ブートストラッピングのリソースオファリング領域で、デフォルトのサービスタイプ urn:liberty:disco:2003-08 をクリックします。
「リソースオファリングを編集」ページが開きます。
- 「サービスインスタンス」の下の「サービス記述」領域で、urn:liberty:security:2003-08:null:null エントリの横にあるチェックボックスを選択し、「削除」ボタンをクリックします。
「サービス記述」領域の項目がなくなります。
- 「サービス記述」領域で、「新規記述」ボタンをクリックします。
「新規セキュリティーメカニズム ID」ページが開きます。
- 「新規セキュリティーメカニズム ID」ページの、「選択可能」リストで、urn:liberty:security:2005-02:null:X509 を選択して「了解」をクリックします。
注: システムがエンドポイント URL を要求する場合、 http://localhost:8080/amserver/Liberty/disco を使用します。サーバーがポート 8080 にインストールされていない場合、8080 を正しいポート番号に置き換えます。
「サービス記述」領域の「サービスインスタンス」の下に、「リソースオファリングを編集」ページが開き、そこに urn:liberty:security:2005-02:null:X509 というラベルのエンティティーがあります。
- 「リソースオファリングを編集」ページで「保存」をクリックしてから、「ディスカバリサービス」ページで「保存」をクリックします。
- 上部のナビゲーション領域で、「ログアウト」をクリックします。
ページの先頭へ
トラブルシューティング
この節では、発生する可能性のある問題の回避策について説明します。
クライアント呼び出し時の例外のスロー
クライアントが呼び出された場合に、ブラウザで次の例外がスローされます。
Caught an exception java.rmi.ServerException:JAXRPCSERVLET28:Missing port information
この例外で考えられる原因:
- クライアント用として選択されたセキュリティー機構が、サーバーのサポート対象機構のリストにありません。この場合、クライアント用とサーバー用に同じセキュリティー機構を選択してください。
ページの先頭へ
参考文献
ページの先頭へ
まとめ
このチュートリアルでは、NetBeans Enterprise Pack 5.5 を使用して、アイデンティティーベースの Web サービスプロバイダ (WSP) をセキュリティー保護しました。Liberty Security プロファイルベースの認証をカレンダー Web サービスに使用しました。アイデンティティーベースの Web サービスプロバイダ (WSP) をセキュリティー保護する方法と、Web サービスクライアント (WSC) を通じて Web サービスにアクセスするユーザーを認証する方法について学習しました。このチュートリアルでは、Web Service Client と Provider Security Configuration ウィザードを使用するだけでよいという、NetBeans が提供する、特有の使いやすさを示しました。
ページの先頭へ