プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Web Services ManagerによるWebサービスの保護のユース・ケース
12c (12.2.1.1)
E77307_01
目次へ移動
目次

前
次

3 基本認証を使用したRESTful Webサービスの保護

この章では、基本認証を使用してRESTful Webサービスを保護する方法について説明します。

この章の構成は、次のとおりです。

3.1 ユース・ケース: 基本認証を使用したRESTful Webサービスの保護

ユース・ケース・サマリーは、この章の情報が自分のニーズに合致するかどうかを迅速に判断するのに役立ちます。

次のリストは、ユース・ケースの目標、ソリューションおよびコンポーネントをまとめたものです。必要なドキュメントへのリンクも提供されます。

ユース・ケース

基本認証を使用して、RESTful Webサービスを保護します。

実装サマリー

RESTful Webサービスを開発し、Oracle Web Services Manager (OWSM)基本認証ポリシーをアタッチして保護します。

コンポーネント
  • Oracle WebLogic Server

  • Oracle Web Services Manager(OWSM)

  • Oracle JDeveloper

必須ドキュメント

このユース・ケースを完了するには、次のドキュメント・リソースを参照してください。

  • Oracle WebLogic Server RESTful Webサービスの開発と保護

  • Oracle JDeveloperによるアプリケーションの開発におけるRESTful Webサービスの開発および保護に関する項

このユース・ケースは、次の操作に必要な手順を示します。

  • JDeveloperを使用して簡単なHelloWorld RESTful Webサービスを作成します。

  • javax.ws.rs.core.SecurityContextを使用して、出力メッセージに認証済ユーザーの名前を表示します。

  • アプリケーション・サブクラスを使用してRESTful Webサービスをパッケージ化して、RESTful Webサービス・アプリケーション・デプロイメントのコンポーネントを定義し、追加のメタデータを提供します。

  • OWSMグローバル・ポリシーを定義して、デフォルトですべてのRESTful Webサービスを保護します。

  • WebLogic Server管理コンソールを使用して、WARファイルとしてRESTful WebサービスをWebLogic Serverにデプロイします。

  • ブラウザを使用して、HelloWorld Webサービスを検証します。

3.2 ユース・ケースの実装: 基本認証を使用したRESTful Webサービス

ユース・ケース: 基本認証を使用したRESTful Webサービスの保護を実装するには、次の手順を完了します。

3.2.1 基本認証を使用したRESTful Webサービスの実装- 前提条件

開始する前に、次のタスクが実行されていることを確認してください。

  1. 次の製品コンポーネントをダウンロードおよびインストールします。
    • Oracle Fusion Middleware - OWSMを含む

      詳細は、Oracle Fusion MiddlewareのインストールのプランニングのOracle Fusion Middlewareインストールの準備に関する項を参照してください。

    • Oracle JDeveloper Studio Edition

      これは、このドキュメントのユース・ケースのサブセットにのみ必要です。

      Oracle Fusion Middlewareソフトウェアの入手先とダウンロードの詳細は、OTNでOracle Fusion Middlewareダウンロード、インストール、構成のReadmeファイルを参照してください。

  2. WebLogicドメインを構成します。

    完全な手順は、『構成ウィザードによるWebLogicドメインの作成』のWebLogicドメインの作成に関する項を参照してください。

  3. ドメインの管理サーバーを起動します。

    完全な手順は、『Oracle WebLogic Serverサーバーの起動と停止の管理』のサーバーの起動と停止に関する項を参照してください。

  4. 次の管理ツールにアクセスできることを確認します。
    • Oracle Enterprise Manager Fusion Middleware Control。:

      http://localhost:7001/em
      
    • Oracle WebLogic Server管理コンソール

      http://localhost:7001/console
      

3.2.2 デフォルトですべてのRESTfulリソースの保護

RESTfulリソースをデプロイする前に、最初にグローバル・ポリシーを定義して、デフォルトですべてのRESTfulリソースを保護します。

次の手順では、OWSMグローバル・ポリシー・セットを定義し、すべてのRESTfulリソースに割り当てます。oracle/wss_http_token_service_policyポリシーがすべてのRESTfulリソースの基本認証の構成ポリシーにアタッチされます。

WebサービスのWLSTコマンドの詳細は、『インフラストラクチャ・コンポーネントのためのWLSTコマンド・リファレンス』のWebサービスのWLSTカスタムWLSTコマンドに関する項を参照してください。

デフォルトですべてのRESTfulリソースを保護するには:

注意:

完全な手順は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のWLSTを使用したポリシーのグローバルなアタッチに関する項を参照してください。

  1. WebLogic Serverが稼働していることを確認します。
  2. WLSTを起動し、『Webサービスの管理』のWebサービスのカスタムWLSTコマンドへのアクセスに関する項の説明に従って、WebLogic Serverの実行中のインスタンスに接続します。
    wls:/offline> connect('weblogic', 'welcome1', 't3://localhost:7001')
    Connecting to t3://localhost:7001 with userid weblogic ...
    Successfully connected to Admin Server "AdminServer" that belongs to domain "base_domain".
     
    Warning: An insecure protocol was used to connect to the
    server. To ensure on-the-wire security, the SSL port or
    Admin port should be used instead.
    
  3. セッションを開始します。
    wls:/base_domain/serverConfig> beginWSMSession()
    Location changed to domainRuntime tree. This is a read-only tree with DomainMBean as the root.
    For more help, use help('domainRuntime')
     
    Session started for modification.
    
  4. すべてのRESTfulリソースのOWSMグローバル・ポリシー・セットを定義します。
    wls:/base_domain/serverConfig> createWSMPolicySet('rest-policy-set','rest-resource', 'Service("*")')
     
    Description defaulted to "Global policy attachments for RESTful Resource resources."
    The policy set was created successfully in the session.
    
  5. oracle/wss_http_token_service_policyポリシーをすべてのRESTfulリソースの基本認証を必要とするポリシー・セットにアタッチします。
    wls:/base_domain/serverConfig> attachPolicySetPolicy('oracle/wss_http_token_service_policy')
     
    Policy reference "oracle/wss_http_token_service_policy" added.
    
  6. セッションをコミットします。
    wls:/base_domain/serverConfig> commitWSMSession()
     
    The policy set rest-policy-set is valid.
    Creating policy set rest-policy-set in repository.
     
    Session committed successfully.
    

3.2.3 RESTful Webサービスの作成

次の手順を実行して、JDeveloperを使用した簡単なHelloWorld RESTful Webサービスを作成します。

注意:

JDeveloperを使用する場合のヘルプは、[F1]を押すか、「ヘルプ」をクリックします。

  1. JDeveloperを起動します。

    完全な手順は、『Oracle JDeveloperのインストール』のOracle JDeveloper Studioのインストール後の次の手順に関する項を参照してください。

  2. カスタム・アプリケーションの作成ウィザードを使用して、アプリケーションとプロジェクトを作成します。

    「ファイル」→「新規」→「アプリケーション」「一般」→「アプリケーション」→「カスタム・アプリケーション」の順に選択して、カスタム・アプリケーションの作成ウィザードを起動します。

    • アプリケーション名: RESTfulApplication

    • プロジェクト名: RESTfulService

    • プロジェクトの機能: Java

    • デフォルト・パッケージ: samples.helloworld

    他のすべての値の場合は、デフォルトを受け入れます。

    完全な手順は、『Oracle JDeveloperによるアプリケーションの開発』のアプリケーションとプロジェクトの作成に関する項を参照してください。

  3. 「Javaクラスの作成」ウィザードを使用した新しいJavaクラスの作成

    RESTfulServiceプロジェクトを右クリックして、「新規」→「Javaクラス」を選択して、「Javaクラスの作成」ウィザードを起動します。

    次の特性を定義します。

    • 名前: HelloWorldResource

    • スーパークラスからのコンストラクタ: 選択解除

    • 抽象メソッドの実装: 選択解除

    他のすべての値の場合は、デフォルトを受け入れます。

    完全な手順は、『Oracle JDeveloperによるアプリケーションの開発』の新しいJavaクラスまたはインタフェースの作成方法に関する項を参照してください。

  4. 次の太字に示されているように、hello()メソッドをJavaクラスに追加します。
    package samples.helloworld;
    public class HelloWorldResource {
        public String hello() {
            return "Hello!";
        }
    }
    
  5. 「JavaクラスからのRESTfulサービスの作成」ウィザードを使用して、JavaクラスからRESTfulサービスを作成します。

    HelloWorldResource.javaを右クリックして「RESTfulサービスの作成」を選択し、「JavaクラスからのRESTfulサービスの作成」ウィザードを起動します。

    次の特性を定義します。

    • ルート・パス: helloworld

    • HTTPメソッドの構成: hello

      - Type: Get
      - Produces: text/plain

    他のすべての値の場合は、デフォルトを受け入れます。

    コードが次のように更新されます。

    package samples.helloworld;
     
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
     
    @Path("helloworld")
    public class HelloWorldResource {
     
        @GET
        @Produces("text/plain")
        public String hello() {
            return "Hello!";
        }
    }
    

完全な手順は、『Oracle JDeveloperによるアプリケーションの開発』のRESTful Webサービスの作成に関する項を参照してください。

3.2.4 SecurityContextを使用したユーザーの認証

次の手順は、javax.ws.rs.core.SecurityContextを使用した認証済ユーザーの取得方法を示しています。

詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のSecurityContextを使用したRESTful Webサービスの保護に関する項を参照してください。

SecurityContextを使用した認証済ユーザーを取得するには:

  1. javax.ws.rs.core.Contextアノテーションを使用してインスタンスをクラス・フィールド、セッター・メソッドまたはメソッド・パラメータに注入することで、SecurityContextにアクセスします。

    前の手順で作成したhello()メソッドを更新して、次のようにSecurityContextを使用して取得した認証済ユーザー名を出力します。

    package samples.helloworld;
     
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.SecurityContext;
    import javax.ws.rs.core.Context;
    import java.security.Principal;
     
    @Path("helloworld")
    public class HelloWorldResource {
     
        @GET
        @Produces("text/plain")
        public String hello(@Context SecurityContext sc) {
            String user = "";
            if (sc != null) {
                Principal p = sc.getUserPrincipal();
                if (p != null) {
                    user = p.getName();
                }
            }
            return "Hello " + user + "!";
        }
    }
    

3.2.5 アプリケーション・サブクラスとのパッケージ化

次の手順は、javax.ws.rs.core.Applicationを拡張するクラスを作成してRESTful Webサービス・アプリケーション・デプロイメントのコンポーネントを定義する方法を示し、追加のメタデータを提供します。詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のアプリケーション・サブクラスを使用したパッケージ化に関する項を参照してください。

アプリケーション・サブクラスを使用したRESTful Webサービスをパッケージ化するには:

  1. 「Javaクラスの作成」ウィザードを使用した新しいJavaクラスの作成

    samples.helloworldパッケージを右クリックして、「新規」→「Javaクラス」を選択して、「Javaクラスの作成」ウィザードを起動します。ヘルプは、[F1]を押すか、「ヘルプ」をクリックします。

    次の特性を定義します。

    • 名前: MyApplication

    • パッケージ: samples.helloworld

    • 拡張: javax.ws.rs.core.Application

    • スーパークラスからのコンストラクタ: 選択解除

    • 抽象メソッドの実装: 選択解除

    他のすべての値の場合は、デフォルトを受け入れます。

    完全な手順は、『Oracle JDeveloperによるアプリケーションの開発』の新しいJavaクラスまたはインタフェースの作成方法に関する項を参照してください。

  2. 次の太字で示されているコードを追加することで、getClasses()メソッドをオーバーライドして、RESTful Webサービス・リソースのリストを戻します(この場合はHelloWorldResource)。
    package samples.helloworld;
     
    import javax.ws.rs.core.Application;
    import java.util.HashSet;
    import java.util.Set;
     
    public class MyApplication extends Application {
        public Set<java.lang.Class<?>> getClasses() { 
               Set<java.lang.Class<?>> s = new HashSet<Class<?>>();
               s.add(HelloWorldResource.class);
               return s;
        }
    }
    
  3. javax.ws.rs.ApplicationPathアノテーションを追加して、サーブレットにマップされる基底URIパターンを定義します。この情報がリソースの基底URIで使用される方法の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』の「実行時の処理: 基底URIの構成方法」を参照してください。
    package samples.helloworld;
     
    import javax.ws.rs.core.Application;
    import java.util.HashSet;
    import java.util.Set;
     
    import javax.ws.rs.ApplicationPath;
     
    @ApplicationPath("resources")
    public class MyApplication extends Application {
        public Set<java.lang.Class<?>> getClasses() { 
               Set<java.lang.Class<?>> s = new HashSet<Class<?>>();
               s.add(HelloWorldResource.class);
               return s;
        }
    }

3.2.6 RESTful Webサービスのデプロイ

WARファイルとしてRESTful Webサービス・アプリケーションをWebLogic Serverにデプロイします。

RESTful Webサービスをデプロイするには:

  1. Webアプリケーションのデプロイメント・プロファイルを作成します。

    1. 「デプロイメント・プロファイルの作成」ウィザードを使用して、プロファイルのタイプおよび名前を定義します。

      RESTfulサービス・アプリケーションを右クリックして「デプロイ」→「新規デプロイメント・プロファイル」を選択して、「デプロイメント・プロファイルの作成」ウィザードを起動します。ヘルプは、[F1]を押すか、「ヘルプ」をクリックします。

      次の特性を定義します。

      - プロファイル・タイプ: WARファイル

      - デプロイメント・プロファイル名: helloworld

    2. 「WARデプロイメント・プロファイルのプロパティの編集」ウィザードを使用して、Webアプリケーションのコンテキスト・ルートを定義します。

      「デプロイメント・プロファイルの作成」ウィザードで「OK」をクリックすると、「WARデプロイメント・プロファイルのプロパティの編集」ウィザードが自動的に起動します。ヘルプは、[F1]を押すか、「ヘルプ」をクリックします。

      次の特性を定義します。

      - Java EE Webコンテキスト・ルートを指定: restservice

  2. 「<application>のデプロイ」ウィザードを使用して、次の特性とともにWebアプリケーションをデプロイします。

    RESTfulServiceアプリケーションを右クリックして「デプロイ」→「helloworld」を選択して、「<application>のデプロイ」ウィザードを起動します。ヘルプは、[F1]を押すか、「ヘルプ」をクリックします。

    次の特性を定義します。

    • デプロイメント・アクション: WARにデプロイ

  3. 構成されたプロジェクト・ディレクトリのWARファイルを表示します。次に例を示します。

    c:\JDeveloper\mywork\RESTfulApplication\RESTfulService\deploy\helloworld.war
    
  4. WebLogic ServerにWARファイルをデプロイします。詳細は、Oracle WebLogic Server管理コンソール・オンライン・ヘルプのアプリケーションとモジュールのデプロイに関する項を参照してください。

3.3 ユース・ケースの検証: RESTful Webサービス

ブラウザから、RESTful Webサービスにアクセスできます。

ブラウザでRESTful Webサービスにアクセスするには、ブラウザで次のURLを入力して、RESTful Webサービスをテストします。

http://<host>:<port>/restservice/resources/helloworld

たとえば、http://localhost:7001/restservice/resources/helloworldです。

プロンプトが表示されたら、WebLogic Serverのユーザー名とパスワードを入力します。たとえば、weblogicwelcome1です。

次のメッセージがブラウザで戻されます。

Hello weblogic!

Fusion Middleware ControlのWeb Servicesテスト・クライアントまたは「Webサービスのテスト」ページを使用して、Webサービスの基本機能および拡張機能をテストできます。詳細は、『Webサービスの管理』のWebサービスのテストに関する説明を参照してください。

3.4 RESTful Webサービスのユース・ケースのその他のリソース

RESTful Webサービスとクライアントの作成および保護の詳細は、次のリソースを参照してください。

  • Oracle WebLogic Serverの理解のJava EE 6の例に関する項の説明に従って、JAX-RSサンプルを使用してRESTful Webサービスを作成します。

  • Oracle WebLogic Server RESTful Webサービスの開発と保護

  • Oracle JDeveloperによるアプリケーションの開発におけるRESTful Webサービスの開発および保護に関する項