このチュートリアルでは、次のタスクを実行します。
Web Services Manager Controlにログインします。
ゲートウェイを登録します。
Webサービスをゲートウェイに登録します。
ユーザーを認証するポリシーをゲートウェイに追加します。
ユーザーの認証に使用するファイルを作成します。
WebサービスのWSDLを表示します。
ユーザーを認証するかどうかポリシー・ステップをテストします。
ユーザーのアクセス権を検証する認可ポリシーを追加します。
サンプルの認可ファイルを編集します。
ユーザーを認可するかどうかポリシー・ステップをテストします。
このチュートリアルを始める前に、Oracle Web Services Managerデータベースのバックアップ・コピーを作成します。データベース・ファイル(orawsm.odb)は、次のディレクトリにあります。
$ORACLE_HOME/10.1.3.1/owsm/Mobile/Sdk/OLDB40
このチュートリアルの指示は、Oracle Web Services Managerの新規インストールから始めることを前提としています。エラーが発生した場合、またはチュートリアルを再度始める場合は、データベース・ファイルのバックアップ・コピーを先に示したディレクトリにコピーしてください。
Webブラウザを開き、次のURLを入力します。
http://fully_qualified_host_name:http_port
Oracle SOA Suite(10.1.3.1.0)へようこそページが表示されます(図2-1)。
「SOA Suiteの管理」ボックスの「Web Services Manager Control」リンクをクリックします。
ログイン・ページで、oc4jadminとしてログインし、インストール時に指定したパスワードを使用します。「ログイン」をクリックします(図2-2)。
注意: スタンドアロンのOracle WSMにログインする場合、ログイン・ページの表示は若干異なります。Oracle Web Services Manager管理者としてログインします。デフォルトでは、ユーザー名はadmin、パスワードはoracleです。 |
次に、Web Services Manager Controlページが表示されます(図2-3)。
Oracle Web Services Managerでは、Webサービスを保護するためのゲートウェイ・コンポーネント、サーバー・エージェント・コンポーネントおよびクライアント・エージェント・コンポーネントを作成できます。このクイック・スタート・チュートリアルでは、Oracle WSMゲートウェイを作成および登録します。
「新規コンポーネントの追加」をクリックします(図2-4)。
注意: 「新規コンポーネントの追加」ボタンが表示されない場合は、「ポリシー管理」をクリックした後、左側のナビゲーション・ペインから「ポリシーの管理」をクリックして、正しいページに戻ります(図2-5)。 |
「新規コンポーネントの追加」ページで、次のように入力します。
コンポーネント名: 「MyGateway」と入力します。
コンポーネント・タイプ: デフォルト値「ゲートウェイ」を受け入れます。
コンテナ・タイプ: デフォルト値「Oracle Web Services Manager」を受け入れます。
コンポーネントURL: 「http://fully_qualified_host_name:http_port/gateway」と入力します。
ここで、fully_qualified_host_nameはOracle Web Services ManagerのURL、http_portはOracle Web Services Managerがホストされるポートです。
ヒント: Web Services Manager Controlへのアクセスに使用したブラウザのURLを確認してください。ccoreをgatewayで置き換えます。たとえば、次のURLを変更するとします。http://marcc-pc.us.oracle.com:8888/ccore 変更後のURLは次のようになります。 http://marcc-pc.us.oracle.com:8888/gateway このURLを「コンポーネントURL」フィールドに入力します。 |
コンポーネント・グループ: コンポーネント・グループのデフォルト値を受け入れます。
図2-6に、「新規コンポーネントの追加」ページの例を示します。
「登録」をクリックします。
次のメッセージが表示され、ゲートウェイが正常に登録されたことを確認できます(図2-7)。
「OK」をクリックします。
これで「コンポーネントのリスト」にゲートウェイが表示されます(図2-8)。
このチュートリアルでは、作成したばかりのゲートウェイにTime Service Webサービスを登録します。(Time Serviceの詳細は、この手順の最後に示します。)この登録により、ゲートウェイをその保護対象のWebサービスと関連付けます。
Web Services Manager Controlのナビゲーション・ペインから、「ポリシー管理」、「サービスの登録」の順にクリックします(図2-9)。
図2-9 Web Services Manager Controlのナビゲーション・ペイン
「ゲートウェイのリスト」ページ(図2-10)に、作成したばかりのゲートウェイが表示されます。「ゲートウェイ名」には登録時にゲートウェイに割り当てた名前が、「ゲートウェイID」にはOracle Web Services Managerによってゲートウェイに割り当てられたコンポーネントIDが表示されます。
「サービス」リンクをクリックします。
「新規サービスの追加」をクリックします。
「サービスのリスト」ページが表示されますが、現在このゲートウェイに登録されているサービスはありません(図2-11)。
「新規サービスの追加」をクリックします。
「新規サービスの追加」ページで、次のサービスの詳細を入力します。
サービス名: TimeService
注意: TimeとServiceの間に空白はありません。これについては、後で説明します。
サービスのバージョン: 1.0
サービスの説明: Gives the time of day
WSDL URL: http://fully_qualified_host_name:http_port/ccore/TimeService.wsdl
ここで、fully_qualified_host_nameはOracle Web Services ManagerのURL、http_portはOracle Web Services Managerがホストされるポートです。
注意: ここで割り当てるURLおよびポートがゲートウェイの登録時に指定したURLおよびポートと一致することが重要です。 |
サービス・プロトコル: デフォルト値「HTTP(S)」を受け入れます。
サービス・グループ: デフォルト値を受け入れます。
図2-12に、サービスの詳細を入力した「新規サービスの追加」ページの例を示します。
「次へ」をクリックします。
「新規サービスのメッセンジャ・ステップを構成」ページが表示されます。前のページでデフォルトのサービス・プロトコルHTTP(S)を確定したので、このページ(図2-13)にはHTTP(S)プロトコルを構成するためのパラメータが表示されます。
「新規サービスのメッセンジャ・ステップを構成」ページで、URLが前のページで指定したURLと一致することを確認します。残りのフィールドのデフォルト値を受け入れ、「終了」をクリックします。
次のメッセージが表示されます(図2-14)。
「OK」をクリックします。
これで「サービスのリスト」に新規サービスが表示されます(図2-15)。「サービス名」、「バージョン」および「説明」には、サービスの登録時に入力した値が表示されます。「サービスID」には、Oracle Web Services Managerによってサービスに割り当てられたIDが表示されます。
図2-15 TimeServiceが追加された「サービスのリスト」ページ
「ポリシーのコミット」フィールドが赤色で表示されていることに注意してください。これは、「コミット」リンクをクリックし、Oracle WSMデータベースに対して変更をコミットする必要があることを警告しています。「コミット」をクリックします。
次の確認が表示されます(図2-16)。「OK」をクリックします。
「サービスのリスト」ページ(図2-17)に戻ります。このとき、「ポリシーのコミット」フィールドには、「ポリシーはコミットされています」と表示されていることに注意してください。
Time Service Webサービスについて
Oracle WSMには、現在の時間を返すTime Service Webサービスが同梱されています。Time Serviceは、Oracle Application Serverにデプロイされないという意味では、実際のWebサービスではありません。(Time ServiceはサンプルJSPです。)そのため、Time Serviceはゲートウェイでのみ使用でき、エージェントでは使用できません。Time ServiceのWSDLファイルは、次の場所にあります。
ORACLE_HOME/j2ee/home/applications/ccore/ccore/TimeService.wsdl
Time ServiceのWSDLファイルには、ブラウザで次のURLを使用するとゲートウェイを介さずに直接アクセスできます。
http://fully_qualified_host_name:http_port/ccore/TimeService.wsdl
これでWebサービスはゲートウェイに関連付けられたので、サービスを保護するためにゲートウェイで使用されるポリシーを追加します。一般に、Webサービス・クライアントは、ユーザー資格証明を含むXMLメッセージを送信してリクエストを発行します。このチュートリアルではエージェントではなくゲートウェイを使用するため、リクエストは直接ゲートウェイに対して作成されます。つまり、ゲートウェイは保護されたWebサービスを仮想化します。
このチュートリアルでは、2つのポリシー・ステップを使用してこのサービスを保護します。第1のポリシー・ステップ「資格証明の抽出」では、ユーザー名およびパスワードの資格証明をリクエストから分離します。第2のステップ「ファイルの認証」では、有効なユーザーとそのパスワードが含まれるファイルを使用してユーザーを認証します。
このチュートリアルの後のほうで、第3のポリシー・ステップ「ファイルの認可」を追加します。このステップでは、ファイルをチェックしてサービスへのアクセス権が付与されたロールにユーザーが属しているかどうかを確認し、ユーザーを認可します。
「資格証明の抽出」ポリシー・ステップの追加方法
このポリシー・ステップでは、ユーザー資格証明をWebサービス・リクエストから抽出します。
Web Services Manager Controlのナビゲーション・ペインから、「ポリシー管理」、「ポリシーの管理」の順にクリックします。
「コンポーネントのリスト」で、ゲートウェイの「ポリシー」リンクをクリックします(図2-18)。
MyGatewayコンポーネントのポリシーが表示されます(図2-19)。デフォルトでは、Oracle WSMにより、サービス名と同じ名前のポリシー(この例ではTimeService)が作成されます。バージョン番号がカッコ内に示されていることに注意してください。
「編集」アイコンをクリックします。
「TimeService(1.0)」ポリシーの「ポリシー定義」ページが表示されます(図2-20)。ポリシー定義には4つのパイプラインまたはパートがあります。
脚注1 PreRequestパイプライン: このパイプラインのポリシー・ステップは、Webサービス・リクエストの処理前に実行されます。
Requestパイプライン: このパイプラインのポリシー・ステップは、Webサービス・リクエストに対して実行されます。
Responseパイプライン: このパイプラインのポリシー・ステップは、Webサービスからのレスポンスに対して実行されます。
脚注1 PostResponseパイプライン: このパイプラインのポリシー・ステップは、Webサービスからのレスポンスがクライアント・リクエスタに送信された後に実行されます。
注意: このページのスクリーンショットは切り捨てられています。ページをスクロール・ダウンすると、4つのパイプラインすべてを表示できます。 |
このチュートリアルでは、Requestパイプラインにポリシーを追加します。デフォルトでは、「ログ」ポリシー・ステップがRequestパイプラインとResponseパイプラインに追加されています。
Requestパイプラインの「ログ」ステップの下にポリシー・ステップを追加します。「ログ」ステップの行で、「以下にステップを追加」リンクをクリックします(図2-21)。
ページがリフレッシュされ、「新規ステップ」ボックスが表示されます。「ステップ・テンプレートの選択」リストで、矢印をクリックしてポリシー・ステップのリストを表示し、リストから「資格証明の抽出」を選択して「OK」をクリックします(図2-22)。
「資格証明の抽出」ポリシー・ステップが「ログ」ステップの下に追加されます。今度は、「資格証明の抽出」ステップを構成します。「資格証明の抽出」の行で、「構成」リンクをクリックします(図2-23)。
「資格証明の抽出」ポリシー・ステップのプロパティが表示されます。
このチュートリアルでは、WS-I Basic Security Profileに指定されている標準Username Tokenからユーザーの資格証明を抽出するシミュレーションを行い、有効なユーザーのファイルに対してユーザーを認証します。
「パイプライン・ステップの構成」ページで、図2-24に示すとおり、資格証明の場所のデフォルト値を「WS-BASIC」に変更します。
ページの一番下までスクロールし、「OK」をクリックします。
「ポリシー定義」ページに戻ります。
「ファイルの認証」ポリシー・ステップの追加方法
抽出された資格証明は、リファレンスに対して検証する必要があります。このチュートリアルでは、リファレンスは有効なユーザー名とパスワードのファイルです。Oracle Web Services Managerで使用できるその他のリファレンスには、LDAPディレクトリ、Oracle Access Manager、CAからのeTrust SiteMinderがあります。
「資格証明の抽出」の行で、「以下にステップを追加」リンクをクリックします。
「ステップ・テンプレートの選択」リストから「ファイルの認証」を選択し、「OK」をクリックします(図2-25)。
「ファイルの認証」の行で、「構成」をクリックします。
「ファイルの認証」ポリシー・ステップのプロパティが表示されます。パスワード・ファイルの場所ボックスに、ユーザーの認証に使用されるファイルの場所と名前をフルパスで指定します(図2-26)。この例では、次の場所を指定します。
C:\.htpasswd
後の手順で、.htpasswdファイルをルート・ディレクトリに作成します。
.htpasswdファイルの形式フィールドに、パスワードが暗号化される形式を指定します。リストから「md5」を選択します(図2-26)。MD5は、このチュートリアルの後のほうでパスワードの暗号化に使用するメッセージ・ダイジェスト・アルゴリズムです。
「OK」をクリックします。
「次へ」をクリックした後、「保存」をクリックします(図2-27)。
「ポリシーのコミット」フィールドが赤色で表示され、変更をコミットする必要があることを警告します(図2-28)。「コミット」リンクをクリックします。
図2-28 TimeServiceポリシーが追加されたMyGatewayゲートウェイのポリシー・セット
ページがリフレッシュされ、「ポリシーのコミット」フィールドにポリシーがコミットされたことを示すメッセージが表示されます。
ユーザー名とパスワードを指定してファイルを作成します。このファイルは、「ファイルの認証」ステップに指定しましたが、Webサービスにアクセスを試みるときの認証に使用されます。Oracle WSMツールを使用してファイル内のパスワードをエンコードします。
テキスト・ファイルを作成し、ユーザー名とパスワードを次の形式で追加します。
user_name:password
図2-29に、ユーザー名marccとパスワードjava1を指定したサンプルのテキスト・ファイル(.htpasswd)を示します。このユーザー名とパスワードの組合せを入力するか、独自のユーザー名とパスワードを追加します。
.htpasswordという名前でファイルをルート・ディレクトリに保存します。ここではルートにファイルを保存しますが、どこに保存してもかまいません。
Oracle WSMユーティリティを使用して、パスワードのダイジェストまたはハッシュを作成します。ダイジェストとは、圧縮するために一方向の数学関数を入力ストリームに適用した結果です。Message-Digest Algorithm 5(MD5)は、パスワードの格納によく使用される数学関数の1つです。
コマンド・ウィンドウを開き、次のコマンドを実行します。
Linuxの場合:
ORACLE_HOME/owsm/bin/wsmadmin.sh md5encode user_name password .htpasswd
Windowsの場合:
ORACLE_HOME\owsm\bin\wsmadmin md5encode user_name password .htpasswd
次に例を示します。
ORACLE_HOME\owsm\bin\wsmadmin md5encode marcc java1 .htpasswd
.htpasswdファイルをテキスト・エディタで開きます。入力したパスワードが、図2-30に示すような暗号化されたパスワードで置き換えられていることがわかります。
「ファイルの認証」ポリシー・ステップは、実行されると.htpasswdファイルを使用して、渡された資格証明がファイル内のエントリの1つと一致するかどうかを確認します。
WSDLをテストしてWebサービスにアクセスできるかどうかを確認するために、WSDLが登録されているOracle WSMゲートウェイに対してリクエストを作成する必要があります。リクエストを作成するURLを取得する必要があります。
Web Services Manager Controlのナビゲーション・ペインから、「ポリシー管理」、「サービスの登録」の順にクリックします。
ゲートウェイMyGatewayの「サービス」リンクをクリックします。
「サービスのリスト」で、TimeServiceサービスの「編集」リンクをクリックします(図2-31)。
「サービスの編集」ページで、「サービスのWSDL URL」フィールドのURLをコピーします(図2-32)。
このURLは、次のタスクで使用します。
Webサービスの保護
Oracle Web Services Managerゲートウェイは、Webサービスを仮想化するように設計されています。そのため、Webサービスに直接アクセスし、ゲートウェイによるセキュリティを回避できます。この潜在的なセキュリティ違反をなくすため、顧客はOracle Web Services Managerエージェントを使用して、必ずエージェントを通してのみWebサービスにアクセスできるようにすることをお薦めします。この方法は、ラストマイル・セキュリティと呼ばれることもあります。
Webサービス・リクエストをシミュレートして、Time Serviceが適切に保護されているかをテストします。認証ファイルに追加したユーザー名とパスワードを使用してリクエストを作成します。
Web Services Manager Controlのナビゲーション・ペインから、「ツール」、「テスト・ページ」の順にクリックします(図2-33)。
図2-34に示すように、コピーしたURLを「WSDL URLを入力してください」テキスト・ボックスに貼り付けます。
「問合せの発行」をクリックします。「Webサービスのテスト」ページがリフレッシュされ、複数のパラメータが表示されます(図2-35)。エンドポイントURLがゲートウェイを指していることに注意してください。
資格証明を指定して、Webサービス・クライアントからのリクエストをシミュレートします。「WSセキュリティ」パラメータの横のプラス記号(+)をクリックします。「ユーザー名」パラメータと「パスワード」パラメータが表示されます(図2-36)。
「ヘッダーに含める」チェック・ボックスを選択して、WS-Securityヘッダーに資格証明を含めます(図2-36)。
.htpasswdファイルに指定したユーザー名とパスワードを、「ユーザー名」フィールドと「パスワード」フィールドに入力します。図2-36では、ユーザーmarccとこのユーザーのパスワードが曖昧化されて表示されています。
「起動」をクリックします。
「テスト結果」に現在の時間が表示されます。デフォルトでは、結果はRAW HTMLで表示されます。「フォーマット済XML」リンクをクリックして、読みやすい形式で結果を表示します(図2-37)。
ここでは、Time Service Webサービスに対するリクエストを作成しますが、今度は無効なユーザー名とパスワードを使用して、「ファイルの認証」ポリシー・ステップが機能していることを検証します。
「テスト結果」ページで、「同じWSDLの再テスト」リンクをクリックします。
「WSセキュリティ」の横のプラス記号(+)クリックしてWS-Securityのパラメータを表示します。
今度は、無効なユーザーのユーザー名(bugs bunnyなど)と任意のパスワードを入力します。
再度、「ヘッダーに含める」チェック・ボックスを選択します。
「起動」をクリックします。
今度は、「テスト結果」にクライアント認証フォルトの発生が表示され、現在の時間は返されません(図2-38)。
最初に有効な資格証明を指定し、次に無効な資格証明を指定して、認証が機能していることをテストしました。認証では、指定した資格証明に基づいてIDを検証します。しかし、これは第1ステップにすぎません。第2ステップでは、ユーザーIDに割り当てられた属性に基づいて、リソース(このチュートリアルではTime Service Webサービス)にアクセスする権限が認証されたユーザーにあるかどうかを検証します。
まず、ゲートウェイのRequestパイプラインを編集して認可ポリシー・ステップを追加する必要があります。
「ファイルの認可」ポリシー・ステップの追加方法
Web Services Manager Controlのナビゲーション・ペインから、「ポリシー管理」、「ポリシーの管理」の順にクリックします。
「コンポーネントのリスト」で、ゲートウェイの「ポリシー」リンクをクリックします。
「編集」アイコンをクリックします。
「ファイルの認証」の行で、「以下にステップを追加」をクリックします。
「ステップ・テンプレートの選択」リストから「ファイルの認可」を選択し、「OK」をクリックします(図2-39)。
「ファイルの認可」の行で、「構成」をクリックします。
「ファイルの認可」ポリシーのプロパティが表示されます(図2-40)。
ユーザーの認可に使用されるファイルをユーザー・ロール・ファイルの場所フィールドに指定します(図2-40)。
「ORACLE_HOME/owsm/config/gateway/roles.xml」と入力します。
ここで、ORACLE_HOMEは、Oracle Web Services Managerがインストールされたディレクトリです。
Webサービスへのアクセスを許可されたロールを許可されたロール・フィールドに指定します。「guest」と入力して「OK」をクリックします(図2-41)。
「次へ」をクリックした後、「保存」をクリックします。
「ポリシーのコミット」フィールドが赤色で表示され、変更をコミットする必要があることを警告します。「コミット」リンクをクリックします。
ユーザー名とパスワードが認証されると、Oracle Web Services ManagerではWebサービスにアクセスする権限がユーザーにあるかどうかを確認します。このチュートリアルでは、ファイルをチェックして認可されたロールにユーザーが割り当てられているかどうかを確認し、これを行います。
サンプルの認可ファイルは、次の場所にあります。
ORACLE_HOME/owsm/config/gateway/roles.xml
ここで、ORACLE_HOMEは、Oracle Web Services Managerがインストールされたディレクトリです。ユーザー名とguestロールをこのファイルに追加します。
ファイルをテキスト・エディタで開きます。
ユーザー名とロールguestを追加します。図2-42に、ロールguestに割り当てられたユーザーmarccを示します。
ファイルを保存します。
ユーザー名とパスワードが「ファイルの認証」ステップで正常に認証されると、「ファイルの認可」が実行されます。Oracle WSMでは、roles.xmlファイルをチェックして、Time Service Webサービスにアクセスする権限があるロールにユーザーが割り当てられているかどうかを確認します。この例では、guestロールを割り当てられたユーザーはサービスにアクセスできます。
今度は、ファイルに対して検証される有効な資格証明を送信します。次に、ユーザーがファイルに対してチェックされ、Webサービスにアクセスする権限があるロールに割り当てられているかどうかが確認されます。
Web Services Manager Controlのナビゲーション・ペインから、「ツール」、「テスト・ページ」の順にクリックします。
コピーしたURLを「WSDL URLを入力してください」テキスト・ボックスに貼り付けます。
「問合せの発行」をクリックします。
「WSセキュリティ」パラメータの横のプラス記号(+)クリックします。
「ヘッダーに含める」チェック・ボックスを選択します。
.htpasswdファイルに指定したユーザー名とパスワードを入力し、「起動」をクリックします。
「テスト結果」に現在の時間が表示されます。
ここでは、認可ファイルを編集してWebサービスにアクセスする権限がないロールをユーザーに割り当て、「ファイルの認可」ポリシー・ステップをテストします。
ORACLE_HOME/owsm/config/gateway/roles.xmlファイルを編集します。ユーザーのロールをguest以外のロールに変更し、ファイルを保存します。この例では、ユーザーmarccはロールsupportに割り当てられています(図2-43)。
「テスト・ページ」ページで、「同じWSDLの再テスト」リンクをクリックします。
「WSセキュリティ」の横のプラス記号(+)クリックしてWS-Securityのパラメータを表示します。
有効なユーザー名とパスワードを入力し、「起動」をクリックします。
今度は、「テスト結果」ページにクライアント認可フォルトが表示され、この例のユーザーmarccによるサービス(IDはSID0003001)へのアクセスは拒否されたことが示されます(図2-44)。
このチュートリアルでは、Oracle Web Services Managerのセキュリティ機能について学習しました。Oracle WSMゲートウェイを作成してWebサービスを登録し、Webサービスを保護するポリシーを作成してテストしました。
今度は、Oracle WSMの監視機能を見てみましょう。
脚注
脚注1: PreRequestパイプラインとPostResponseパイプラインは、Oracle Web Services Managerの次期リリースではサポートされない予定です。