プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理
12c (12.2.1.3.0)
E90181-03
目次へ移動
目次

前
次

10 Oracle Web Services Managerを使用した認可の構成

OWSMを使用して認可を構成できます。認可(アクセス制御とも呼ばれる)により、認証されたクライアントがどの操作にアクセスできるかを決定できます。

トピック:

10.1 認可の概要

多くの場合、認証はユーザーにWebサービスへのアクセスを許可するかどうかを決定する最初の手順となります。ユーザーが認証されたら、2番目の手順は、ユーザーがWebサービスへのアクセスを認可されていることを検証することです。これは、認可ポリシーを使用して実行されます

binding_authorization_templateまたはcomponent_authorization_templateアサーション・テンプレートを使用して、認可ポリシーを作成できます。

これらのテンプレートを使用して作成されたポリシーでは、ロール・ベースまたは権限ベースのアクセス制御(RBAC)が実行され、認証されたユーザーにWebサービスへのアクセスが許可されたいずれかのロールまたは権限が付与されていることが確認されます。

現在のリリースで使用可能な認証ポリシーのサマリーは、Webサービスに使用する事前定義済ポリシーの決定認可ポリシーを参照してください。Oracle Web Services Managerの事前定義済ポリシーに、認可を実行するセキュリティ・ポリシーをまとめ、ポリシーがトランスポート・レイヤーまたはSOAPヘッダーで実行されるかどうかを示します。

認可の詳細は、『Oracle Web Services Managerの理解』の認可の概要に関する項を参照してください。

注意:

認可ポリシーは、サブジェクトが作成されている任意の認証ポリシーの後に続けることができます。

permitallおよびdenyallポリシーの両方を同じWebサービスに添付することはできません。

10.2 保護するリソースの決定

認可ポリシーには、ポリシーで保護するリソースを指定するために使用できる次のプロパティがあります。すべての事前定義済ポリシーにすべてのプロパティを設定できるとはかぎりません。

注意:

事前定義済ポリシーは読取り専用であり、編集できません。ただし、ベースとして事前定義済ポリシーを使用して新しいポリシーを作成できます。新しいポリシーの作成の詳細は、「Webサービス・ポリシーの作成および編集」を参照してください。新しいポリシーを作成したら、必要に応じて、ポリシーの編集や設定の変更、または構成プロパティの設定が行えます。

  • 制約一致 -- 認可チェックが実行される制約を表す式。制約式は、次の2つのmessageContextプロパティを使用して指定します。

    • messageContext.authenticationMethod: ユーザーの認証に使用する認証方法を決定します。有効な値は、SAML_SVのみです。

    • messageContext.requestOrigin: リクエストが内部ネットワークまたは外部ネットワークから発行されたかどうかを決定します。このプロパティは、Oracleを使用しており、Oracle HTTP Server管理者がカスタムのVIRTUAL_HOST_TYPEヘッダーをリクエストに追加した場合のみ有効です。リクエストへのこのヘッダーの追加の詳細は、「リクエスト元を指定するためのOracle HTTP Serverの構成」を参照してください。

    次の点に注意してください。

    • 制約一致プロパティとその値では、大文字と小文字が区別されます。

    • 制約式では、サポートされている標準的な演算子(==!=&&||!)を使用します。

    次の例では、現在のメッセージにSAML_SVトークンが含まれない場合またはリクエスト元が内部でない場合のみ、ロールベースの認可アサーションが実行されます。

    ${!(messageContext.authenticationMethod =='SAML_SV'|| messageContext.requestOrigin == 'internal')}
    

    注意:

    このプロパティは、binding_authorization_templateに基づく認可ポリシーでのみ有効です。他の認可アサーション・テンプレートに基づくポリシーの場合、このプロパティは今後の使用のために予約されています。

  • アクション一致 -- 権限ベースの確認が実行されるWebサービス操作。この値は、値のカンマ区切りのリストにすることもできます。このフィールドではワイルドカードを使用できます。*は、すべてのサービス操作を意味します。

    「アクション一致」の有効な値は、Webサービス・メソッドで決まります。たとえば、Webサービス・メソッドがvalidate(amountAvailable)の場合は、アクション・パターンをvalidateと入力します。

  • リソース一致 -- 権限ベースの確認が実行されるリソースの名前。このフィールドではワイルドカードを使用できます。デフォルトは*で、ポリシーによって保護されるWebサービスのすべてのリソースに対応します。

    表記規則により、リソース・パターンを(Webサービスのネームスペース+ Webサービス名)として入力します。

    たとえば、Webサービスのネームスペースがhttp://project11で、Webサービス名がCreditValidationの場合、リソース名をhttp://project11/CreditValidationと入力します。

    特定のリソース一致を指定した場合、ポリシーは、基準と一致するWebサービスに対してのみ実行されます。つまり、特定のリソース一致フィールドの値を入力すると、認可ポリシーのスコープが制限されます。デフォルトの*により、一括アタッチされたWebサービスのすべてのリソース(Webサービスのネームスペース+ Webサービス名)が保護されます。

  • 権限クラス -- デフォルトでは、oracle.wsm.security.WSFunctionPermissionになっています。クラスは、クラスパスに存在する必要があります。

  • ロール -- 可能な値は、「すべてを許可」「すべてを拒否」および「選択したロール」です。「選択したロール」を選択した場合、WebLogic Serverで定義されたエンタープライズ(グローバル)ロールのいずれかを選択する必要があります。このロールには、次のものがあります。

    • AdminChannelUser

    • Anonymous

    • AppTester

    • CrossDomainConnector

    • Deployer

    • Monitor

    • Operator

    • OracleSystemRole

10.3 認可権限の決定

概念的には、認証されたサブジェクトがWebサービス・ポリシーによって保護された特定のリソースへのアクセスを許可されるかどうかの決定には、連携して機能する2つの部分が関与します。

  • 認可ポリシーの「アサーション」詳細ページのリソース一致およびアクション一致パラメータにより、図10-1に示すように、ポリシーで保護するリソースが決定されます。

    oracle/binding_permission_authorization_policyには、異なるアクションおよびリソースを設定するために使用可能なresourceおよびaction構成プロパティも含まれています。これらのプロパティを設定するか、オーバーライドする場合、「リソース一致」および「アクション一致」パラメータを使用して構成するアクションおよびリソースのかわりに、新しい値がアタッチされたWebサービスで使用されます。構成オーバーライドの使用方法の詳細は、「ポリシー構成プロパティのオーバーライド」を参照してください。

    そのポリシーの「権限クラス」設定を変更する方法もあります。これはJAAS標準によって権限クラスを識別します。権限クラスは、アプリケーションまたはサーバーのクラスパスに存在する必要があります。

    カスタムの権限クラスは、抽象的な権限クラスを拡張し、シリアライズ可能なインタフェースを実装する必要があります。http://docs.oracle.com/javase/7/docs/api/java/security/Permission.htmlにあるJavadocを参照してください。デフォルトは、oracle.wsm.security.WSFunctionPermissionです。

    図10-1 ポリシーの権限設定

    図10-1の説明が続きます
    「図10-1 ポリシーの権限設定」の説明
  • OPSSアプリケーション・ポリシー・ページでは、図10-2に示すように、認証されたサブジェクトがそこにリストされている「リソース名」への起動アクセスを持つかどうかを指定します。

    図10-2 OPSS作成アプリケーション付与ページでの権限の追加

    図10-2の説明は次にあります。
    「図10-2 OPSS作成アプリケーション付与ページでの権限の追加」の説明

OPSSは、Webサービスの認可ポリシーの「アサーション」詳細ページを使用して、許可チェックが必要なリソースを決定します。認証されたサブジェクトがそのリソースに対してOPSSを介してWSFunctionPermission(または他の権限)を付与されている場合は、そのリソースへのアクセスが許可されます。

注意:

そのポリシーの構成プロパティ「権限チェック・クラス」を変更する場合は、ここでもカスタム・クラスを使用してください。

図10-1図10-2に示す例をさらに検討します。

認可ポリシーの「アサーション詳細」ページで、http://project11/CreditValidation Webサービスのvalidateメソッドを保護するために次のものを指定しているとします。

Action Match:        validate
Resource Match:       http://project11/CreditValidation
Permission Class  oracle.wsm.security.WSFunctionPermission

次に、OPSSアプリケーション・ポリシー・ページで、「リソース名」http://project11/CreditValidation#validateを使用して、認証されたサブジェクトがこのリソースを起動する権限を持つように指定します。

Permission Class: oracle.wsm.security.WSFunctionPermission
Resource Name:    http://project11/CreditValidation#validate 
Permissions Action:  invoke

WSFunctionPermission権限を、ユーザー、グループまたはアプリケーション・ロールに付与できます。WSFunctionPermissionをユーザーまたはグループに付与した場合、この権限は、ドメインにデプロイされているすべてのアプリケーションに適用されます。

10.4 OPSSリソース名の決定

WSFunctionPermissionのリソース・ターゲットは、実際のWebサービス操作の名前を含めるように機能強化されました。OPSSリソース名にオペレーション名を組み込むことができます。

注意:

OPSSリソース名にオペレーション名を組み込むことができます。

前のリリースのFusion Middleware Controlでは、OPSSアプリケーション・ポリシー・ページの「リソース名」は、name-space-of-webservice/ServiceNameによって決められていました。たとえば、Webサービスのネームスペースがhttp://project1/で、サービス名がCreditValidationの場合、「リソース名」http://project1/CreditValidationでした。アスタリスク(*)ワイルドカードを使用して、すべてのアクションまたはすべてのリソースに権限を与えることもできました。

このリリースでは、WSFunctionPermissionのリソース・ターゲットに実際のWebサービス操作の名前を含めるように機能強化されました。「リソース名」の構文は、name-space-of-webservice/servicename#[オペレーション名]です。

コンポーネントの場合はcompositename/componentname#[オペレーション名]です。

少なくともname-space-of-webservice/service nameを含める必要があります。つまり、アスタリスク(*)ワイルドカードを使用して、すべてのアクションまたはすべてのリソースに権限を与えることはできなくなりました。

そのかわりに、単に操作名を空白のままにしておくだけで、Webサービスのすべての操作を指定できます。たとえば、name-space-of-webservice/servicename#のようにします。

Permission Actionは常にinvokeです。

10.5 Oracle Entitlements Serverを使用したファイングレイン認可の構成について

Oracle Entitlements Server (OES)は、エンドツーエンドでエンタープライズ全体のアプリケーションとサービスを保護するために使用できるファイングレイン認可サービスです。OESはOWSMと統合されており、OESをOWSMとあわせてファイングレイン認可に使用できます。

『Oracle Web Services Managerの理解』のOracle Entitlements Serverの統合の理解に関する項で説明されているように、Oracle Entitlements Server (OES)はファイングレイン認可サービスであり、アプリケーションやサービスをエンドツーエンドで企業全体にわたって保護するために使用できます。OESはOWSMと統合されており、OESをOWSMとあわせてファイングレイン認可に使用できます。

Oracle Entitlements Serverの統合の理解に関する項では、リソースの処理方法の説明を含め、OESの統合の構成に必要な概念的情報が説明されています。また、その項では労働の分離も説明されています。OESポリシーおよび責任はOESコンソールから構成し、OWSM OESポリシーはFusion Middleware Control、WLSTまたはJDeveloperのようなツールから構成します。まだ読んでいない場合は、まずその項を読んでください。

この項では、OES統合の構成方法を説明しており、内容は次のとおりです。

10.5.1 OES統合構成の前提条件

OWSMインストール以外に、既存のOESコンソールのバージョン11.1.2.2.0以上が構成されている必要があります。OESはOWSMと同じマシンで同じOracle Middlewareホームにインストールされている必要があります。

OESはOracle Identity and Access Management Suiteの一部で、次のドキュメントで説明されています。この項は、これらの内容と、OESの構成および管理を理解していることを前提としています。インストール方法の詳細は、Oracle Identity and Access Managementインストレーション・ガイドOracle Entitlements Serverのインストールおよび構成を参照してください。

10.5.2 責任の属性の理解

OESを使用すると、責任をOESコンソールで作成できます。また、複数の属性名/値のペアが提供されます。属性は、XPath、HTTPヘッダー、メッセージ・コンテキスト、定数(名前/値)、さらに認可リクエストで常に渡される静的属性のセット(serviceURLなど)から取得できます。

属性の処理方法に関する項で説明されているように、OESではOESコンソールで責任を作成し、複数の属性名と値のペアを設定できます。属性は、XPath、HTTPヘッダー、メッセージ・コンテキスト、定数(名前/値)、さらに認可リクエストで常に渡される静的属性のセット(serviceURLなど)から取得できます。

属性の情報を決定する最も簡単な方法は、アプリケーションをデプロイすることです。その後、SOAPリクエストまたはWSDLを確認し、必要な属性を決定します。2つの方法があります。

  • アプリケーションをデプロイし、JDeveloper (または別のメカニズム)を使用してSOAPメッセージを確認して必要なものを決定します。

  • アプリケーションをデプロイし、デプロイしたアプリケーションのWSDLを確認して必要なものを決定します。

    Oracle Fusion Middlewareを使用したWebサービスの管理のWebサービスのWSDLドキュメントの表示に関する項の説明に従って、Webサービス・エンドポイントのWSDLドキュメントを表示します。

10.5.3 ファイングレイン認可のためのOESポリシーの構成について

OESに対して認可の決定を問い合せるには、2段階の方法(ファイングレイン)と1段階の方法(大まか)の2通りがあります。この項では、ファイングレイン認可用にOESポリシーを構成する方法を説明します

『Oracle Web Services Managerの理解』のOESの統合: 概観に関する項で説明されているように、認可決定のためにOESにアクセスするには、2段階方式(ファイングレイン)および1段階方式(大まか)の2種類の方法があります。この項では、ファイングレイン認可用にOESポリシーを構成する方法を説明します。

「OWSM OESポリシーのアタッチ方法の理解」で説明されているように、後にOWSMポリシーをアタッチする際に、oracle/binding_oes_authorization_policyおよびoracle/component_oes_authorization_policyポリシーのuse.single.step属性で、どの方法を使用するかを指定します。ただし、OES認可ポリシーを適切に構成できるよう、使用する方法を決定する必要があります。

2段階方式の方がよく使用されるシナリオのため、通常、責任定義用の認可ポリシーと実際の認可決定用の認可ポリシーという、2つのOES認可ポリシーを構成することになります。

OESコンソールを使用して、基本的なアーティファクト(アプリケーション、リソース・タイプなど)を作成し、リソース・タイプにアクションを追加し、リソースを定義します。

この節では、以下のトピックについて説明します。

10.5.3.1 マスキングのためのOESリソースの構成

OESリソース名は、OWSMリソース名にマップする必要があります。OWSMから認可コールを実行すると、リソース名がOESに渡されます。この名前はOESポリシーで定義されている名前と正確に一致する必要があります。

「リソースのマッピングと命名」で説明されているように、OESリソース名をOWSMリソース名にマッピングする必要があります。OWSMから認可コールを実行すると、リソース名がOESに渡されます。この名前はOESポリシーで定義されている名前と正確に一致する必要があります。

例として、次の特性を持つSOAP Webサービスをデプロイしたと仮定します。

  • デプロイしたアプリケーションの名前はHelloWorldServiceEarです。

  • リソース・タイプはWS_SERVICEです。

  • Webサービス名はHelloWorldServiceです。

  • Webサービスのポート名はSayHelloPortです。

  • Webサービス内の操作はsayHelloおよびsayHelloBytesです。

OESリソースを構成するには、次の手順を実行します。

  1. OESアプリケーション名を作成します。アプリケーション名は、デプロイしたアプリケーション名と一致する必要があります。たとえば、HelloWorldServiceEarです。

    図10-3 OESアプリケーションの作成

    図10-3の説明が続きます
    「図10-3 OESアプリケーションの作成」の説明
  2. OESリソース・タイプを作成します。リソース・タイプはWS_SERVICEである必要があります。
  3. WS_SERVICEリソース・タイプにアクションを追加します。アクションはrequest.lookupおよびauthorizeである必要があります。
  4. 「リソース階層のサポート」コントロールを設定します。

    階層を使用することにより、ポリシーをリソース・レベルまたはサブリソース(操作)レベルで定義できます。

    OWSMリソース名には、サービス名、ポート名または操作名が含まれます。ただし、OESコンソールでリソースをこれだけ細かいレベルまで定義する必要はありません。たとえば、サービス名を持つポリシーを定義すると、そのサービスで始まるすべてのリソースに適用されます。または、サービス名とポート名が含まれるリソース名のポリシーを定義すると、このポリシーはそのサービスのすべての操作に適用されます。

    「リソース階層のサポート」コントロールの設定方法は、『Oracle Entitlements Server管理者ガイド』リソース・タイプの作成に関する項で説明されています。

  5. リソースを作成します。リソース名には、サービス名、ポート名または操作名を含めることができます。

10.5.3.2 責任を返す認可ポリシーの作成

この手順を使用すると、責任を返す認可ポリシーを作成できます。

責任を返す認可ポリシーを作成するには、次の手順に従います。

  1. 「マスキングのためのOESリソースの構成」で作成したアプリケーション用に、新規のOES認可ポリシーを作成します。

    リソースにアクセスを許可するプリンシパル(ロールおよびユーザー)を追加します。

    このポリシーによって保護するターゲット(アクションを含む)を追加します。

    図10-4に、画面の例を示します。

    図10-4 責任の認可ポリシーの追加



  2. 「責任」タブで、責任を追加します。

    属性の処理方法に関する項で説明されているように、OESではOESコンソールで責任を作成し、複数の属性名と値のペアを設定できます。

    属性は、XPath、HTTPヘッダー、メッセージ・コンテキスト、定数(名前/値)、さらに認可リクエストで常に渡される静的属性のセット(serviceURLなど)から取得できます。『Oracle Web Services Managerの理解』のOESポリシーでサポートされる属性タイプに関する項で説明されているように、これらの属性は特定の命名規則に従う必要があります。

    例として、この項の次の表に示されているサンプルの責任がどのように抽出されて、図10-5に反映されているかを考えてみてください。

    これらの特定の責任名を使用する必要があり、大/小文字の区別がある点に注意してください。属性名は自分で選択できます。属性の値はリクエストの値と一致する必要があります。

    注意:

    OESコンソールでは、責任名はアプリケーション全体で一意である必要があります。同じアプリケーションで同じタイプの責任を返すOESポリシーを複数定義する場合、同じ名前を使用できません。たとえば、xpath責任をpolicy1に追加した場合、同じアプリケーション内のpolicy2には追加できません。

    責任名を一意にするために、次の命名規則を使用してください。

    <attribute_type>:<obligation_name>

    attribute_typeは、XPath、HTTPHeaderまたはMessageContextなどのサポートされているタイプのいずれかです。obligation_nameは一意になる任意の名前を使用できます。

    アプリケーション内に、責任を返すOESポリシーが1つしか存在せず、競合の可能性がない場合は、属性タイプをそのまま責任名として使用できます。

    責任名 属性名 属性値

    xpath

    input

    //env:Envelope//env:Body/ns3:sayHello/arg0/text()

    xpath

    namespace

    saml=urn:oasis:names:tc:SAML:1.0:assertion

    env=http://schemas.xmlsoap.org/soap/envelope/

    ns3=http://helloworldservice.jaxws.wsmtest/

    各属性名をカンマ(,)で区切ります。例: saml=...,env=..,ns3=

    xpath

    saml_issuer

    //saml:Assertion/@Issuer

    Httpheader

    proxy_auth

    Proxy-Authorization

    Httpheader

    authHeader

    認可

    messageContext

    authMethod

    oracle.wsm.internal.authentication.method

    messageContext

    endpoint

    oracle.j2ee.ws.runtime.endpoint-url

    MyStaticOb

    org

    oracle

    MyStaticOb

    country

    US

    図10-5 認可ポリシーの責任のサンプル



10.5.3.3 大まかな認可のための実際のOES認可ポリシーの作成

実際の認可を実行するOES認可ポリシーを作成します。

このポリシーは、OWSMによって提供された責任を使用して、実際の認可決定を行います。

さらにOWSMからOESに、認証されたサブジェクト、ターゲット・リソースおよびリクエストされたアクション、さらに認可リクエストで常に渡される暗黙属性のセット(詳細はOESポリシーでサポートされる属性タイプに関する項を参照)が渡されます。認可ポリシーでは、認可決定にこれらの値を使用できます。時間、日付などのOESの定義済属性も使用できます。

実際の認可用のOES認可ポリシーを作成するには、次の手順を実行します。

  1. 認可条件で使用する属性を追加します。これらは、「責任を返す認可ポリシーの作成」で作成した責任に一致する必要があります。

    たとえば、「責任を返す認可ポリシーの作成」で作成した責任に一致させるには、次の属性を追加する必要があります。

    • saml_issuer

    • input

    • authHeader

    • endpoint

    • country

    注意:

    暗黙属性(OESポリシーでサポートされる属性タイプに関する項を参照)を使用する場合は、それらも追加する必要があります。

    すべての属性と関数(カスタムおよび事前定義済の両方)は、アプリケーションの「拡張」ノードの下で、作成、収集、およびさらに管理されます。詳細は、『Oracle Entitlements Server管理者ガイド』属性および関数の拡張としての管理に関する項を参照してください。

    OESのナビゲーション・ペインで、認可ポリシーを作成しているアプリケーションを開きます。「拡張」を開き、「属性」を選択してアイコンをクリックし、新規属性を作成します。

    ドロップダウン・コントロールから「保存して次を作成」を選択すると、1つのページから複数の属性を作成できます。

  2. すべての新規属性をリソース・タイプに追加します。
  3. 「マスキングのためのOESリソースの構成」で作成したアプリケーション用に、新規のOES認可ポリシーを作成します。

    リソースにアクセスを許可するプリンシパル(ロールおよびユーザー)を追加します。

    このポリシーによって保護するターゲット(アクションを含む)を追加します。

    図10-7に、画面の例を示します。このポリシーは、ユーザーweblogicHelloWorldServicesayHelloおよびsayHelloBytesリソースにアクセスする際に、認可を評価するように設定されています。

    図10-7 実際の認可ポリシーの追加



  4. このポリシーの「条件」タブで、「編集」をクリックして新規条件を作成します。

    図10-8で示されているように、手順1で追加した属性に基づいて条件を完成させます。

    この例では、次の場合、ポリシーはPERMITを返します。

    • ユーザーがweblogicである。

    • リソースがHelloWorldServiceEar/ HelloWorldService/SayHelloPortである。

    • SAML発行者がwww.oracle.comである。

    • リクエストSOAPメッセージに、//env:Body/ns3:sayHello/arg0で「OWSM」がある。

    • 他の条件が満たされている。

  5. OWSM OESポリシーをアタッチする方法の理解で説明されているように、OWSM OESポリシーをアタッチします。

10.5.4 大まかな認可のためのOESポリシーの構成について

大まかな認可のためのOESポリシーを構成できます。

『Oracle Web Services Managerの理解』のOESの統合: 概観に関する項で説明されているように、認可決定のためにOESにアクセスするには、2段階方式(ファイングレイン)および1段階方式(大まか)の2種類の方法があります。この項では、大まかな認可用にOESポリシーを構成する方法を説明します。

「OWSM OESポリシーのアタッチ方法の理解」で説明されているように、後にOWSMポリシーをアタッチする際に、oracle/binding_oes_authorization_policyおよびoracle/component_oes_authorization_policyポリシーのuse.single.step属性で、どの方法を使用するかを指定します。ただし、OES認可ポリシーを適切に構成できるよう、使用する方法を決定する必要があります。

トピック:

10.5.4.1 大まかな認可のためのOESリソースの構成

「リソースのマッピングと命名」で説明されているように、OESリソース名をOWSMリソース名にマッピングする必要があります。OWSMから認可コールを実行すると、リソース名がOESに渡されます。この名前はOESポリシーで定義されている名前と正確に一致する必要があります。

例として、次の特性を持つSOAP Webサービスをデプロイしたと仮定します。

  • デプロイしたアプリケーションの名前はHelloWorldServiceEarです。

  • リソース・タイプは常にWS_SERVICEです。

  • Webサービス名はHelloWorldServiceです。

  • Webサービスのポート名はSayHelloPortです。

  • Webサービス内の操作はsayHelloおよびsayHelloBytesです。

OESリソースを構成するには、次の手順を実行します。

  1. OESアプリケーション名を作成します。アプリケーション名は、デプロイしたアプリケーション名と一致する必要があります。たとえば、HelloWorldServiceEarです。

    図10-9 OESアプリケーションの作成

    図10-9の説明が続きます
    「図10-9 OESアプリケーションの作成」の説明
  2. OESリソース・タイプを作成します。リソース・タイプはWS_SERVICEである必要があります。
  3. リソース・タイプにアクションを追加します。アクションはauthorizeである必要があります。
  4. 「リソース階層のサポート」コントロールを設定します。

    階層を使用することにより、ポリシーをリソース・レベルまたはサブリソース(操作)レベルで定義できます。

    OWSMリソース名には、サービス名、ポート名または操作名が含まれます。ただし、OESコンソールでリソースをこれだけ細かいレベルまで定義する必要はありません。たとえば、サービス名を持つポリシーを定義すると、そのサービスで始まるすべてのリソースに適用されます。または、サービス名とポート名が含まれるリソース名のポリシーを定義すると、このポリシーはそのサービスのすべての操作に適用されます。

    「リソース階層のサポート」コントロールの設定方法は、『Oracle Entitlements Server管理者ガイド』リソース・タイプの作成に関する項で説明されています。

  5. リソースを作成します。リソース名は、リソース階層をどのように活用するかに合せ、service name/port name/operation nameの形式である必要があります。

10.5.4.2 ファイングレイン認可のための実際のOES認可ポリシーの作成

実際の認可を実行するOES認可ポリシーを作成します。

OWSMからOESに、認証されたサブジェクト、ターゲット・リソースおよびリクエストされたアクション、さらに認可リクエストで常に渡される暗黙属性のセット(詳細はOESポリシーでサポートされる属性タイプに関する項を参照)が渡されます。

認可ポリシーでは、認可決定にこれらの値を使用できます。時間、日付などのOESの定義済属性も使用できます。

実際の認可用のOES認可ポリシーを作成するには、次の手順を実行します。

  1. 暗黙属性(OESポリシーでサポートされる属性タイプに関する項を参照)を使用する場合は、それらを追加する必要があります。

    注意:

    すべての属性と関数(カスタムおよび事前定義済の両方)は、アプリケーションの「拡張」ノードの下で、作成、収集、およびさらに管理されます。詳細は、『Oracle Entitlements Server管理者ガイド』属性および関数の拡張としての管理に関する項を参照してください。

    OESのナビゲーション・ペインで、認可ポリシーを作成しているアプリケーションを開きます。「拡張」を開き、「属性」を選択してアイコンをクリックし、新規属性を作成します。

    ドロップダウン・コントロールから「保存して次を作成」を選択すると、1つのページから複数の属性を作成できます。

  2. 図10-10で示されているように、リソース・タイプで使用するすべての暗黙属性を追加します。

    図10-10 条件で必要な暗黙属性の追加



  3. 「大まかな認証のためのOESリソースの構成」で作成したアプリケーション用に、新規のOES認可ポリシーを作成します。

    リソースにアクセスを許可するプリンシパル(ロールおよびユーザー)を追加します。

    このポリシーによって保護するターゲット(アクションを含む)を追加します。

    図10-11に、画面の例を示します。

    図10-11 実際の認可ポリシーの追加



  4. OWSM OESポリシーをアタッチする方法の理解で説明されているように、OWSM OESポリシーをアタッチします。

10.5.5 マスキングのためのOESポリシーの構成について

マスキングのためのOESポリシーを構成できます。

トピック:

10.5.5.1 OESリソースの構成

「リソースのマッピングと命名」で説明されているように、OESリソース名をOWSMリソース名にマッピングする必要があります。OWSMからマスキング・コールを実行すると、リソース名がOESに渡されます。この名前はOESポリシーで定義されている名前と正確に一致する必要があります。

例として、次の特性を持つSOAP Webサービスをデプロイしたと仮定します。

  • デプロイしたアプリケーションの名前はHelloWorldServiceEarです。

  • リソース・タイプは常にWS_SERVICEです。

  • Webサービス名はHelloWorldServiceです。

  • Webサービスのポート名はSayHelloPortです。

  • Webサービス内の操作はsayHelloおよびsayHelloBytesです。

OESリソースを構成するには、次の手順を実行します。

  1. まだOESアプリケーション名を作成していない場合は、ここで作成します。アプリケーション名は、デプロイしたアプリケーション名と一致する必要があります。たとえば、HelloWorldServiceEarです。

    図10-12 OESアプリケーションの作成

    図10-12の説明が続きます
    「図10-12 OESアプリケーションの作成」の説明
  2. まだOESリソース・タイプを作成していない場合は、ここで作成します。リソース・タイプはWS_SERVICEである必要があります。
  3. まだリソース・タイプにアクションを追加していない場合は、ここで追加します。アクションはresponse.lookupおよびmaskである必要があります。
  4. まだ「リソース階層のサポート」コントロールを設定していない場合は、ここで設定します。

    「リソース階層のサポート」コントロールの設定方法は、『Oracle Entitlements Server管理者ガイド』リソース・タイプの作成に関する項で説明されています。

  5. まだリソースを作成していない場合は、ここで作成します。リソース名は、リソース階層をどのように活用するかに合せ、service name/port name/operation nameの形式である必要があります。

10.5.5.2 責任を返すマスキング・ポリシーの作成

責任を返すマスキング・ポリシーを作成するには、次の手順を実行します。

  1. 「OESリソースの構成」で作成したアプリケーション用に、新規のOESポリシーを作成します。

    リソースにアクセスを許可するプリンシパル(ロールおよびユーザー)を追加します。

    このポリシーによって保護するターゲット(アクションresponse.lookupを含む)を追加します。

  2. 「責任」タブで、責任を追加します。

    属性の処理方法に関する項で説明されているように、OESではOESコンソールで責任を作成し、複数の属性名と値のペアを設定できます。

    このマスキングのユースケースの場合は、マスキングする属性を取得するXPath問合せのセットを作成します。

    これらの責任の結果、OWSMはすべての定義済属性およびXpath問合せを取得し、それらを現在のレスポンスSOAPメッセージで実行します。(このコールで何も返されなかった場合は、実行が停止され、マスキングは実行されません。)OWSMではこの問合せの結果を使用して、「実際のOESマスキング・ポリシーの作成」で説明されている実際のマスキング・ポリシーを呼び出します。

    実際のマスキング・ポリシーの責任を作成する際には、この責任の属性名を使用します。

10.5.5.3 実際のOESマスキング・ポリシーの作成

実際のマスキングを実行するOES認可ポリシーを作成します。

このポリシーは、OWSMによって提供された責任を使用して、実際のマスキング決定を行います。

実際のマスキング用のOESポリシーを作成するには、次の手順を実行します。

  1. 条件で使用する属性を追加します。

    暗黙属性(OESポリシーでサポートされる属性タイプに関する項を参照)を使用する場合は、それらも追加する必要があります。

    注意:

    すべての属性と関数(カスタムおよび事前定義済の両方)は、アプリケーションの「拡張」ノードの下で、作成、収集、およびさらに管理されます。詳細は、『Oracle Entitlements Server管理者ガイド』属性および関数の拡張としての管理に関する項を参照してください。

    OESのナビゲーション・ペインで、認可ポリシーを作成しているアプリケーションを開きます。「拡張」を開き、「属性」を選択してアイコンをクリックし、新規属性を作成します。

    ドロップダウン・コントロールから「保存して次を作成」を選択すると、1つのページから複数の属性を作成できます。

  2. すべての新規属性をリソース・タイプに追加します。
  3. 「OESリソースの構成」で作成したアプリケーション用に、新規のOES認可ポリシーを作成します。

    リソースにアクセスを許可するプリンシパル(ロールおよびユーザー)を追加します。

    このポリシーによって保護するターゲット(アクションmaskを含む)を追加します。

  4. 「責任」タブで、責任を追加します。

    これらの責任により、属性がそのまま渡されるかマスキングされるかが指定されます。OWSMは、OESが返す責任を受け付け、OESによって機密データとマークされている属性はマスキングします。

    属性と置換する値を返します。

    たとえば、責任ポリシーでXPathをname=//env:Envelope//env:Body/ns3:sayHelloResponse/return/text()として追加した場合、マスキング・ポリシーではXPathの責任をname=xxxxxまたはname=****として追加します。ここで、nameは両方のポリシーで一致しています。

  5. OWSM OESポリシーをアタッチする方法の理解で説明されているように、OWSM OESポリシーをアタッチします。

10.5.6 OWSM OESポリシーをアタッチする方法の理解

OWSM OESポリシーをアタッチできます。

トピック:

10.5.6.1 OWSM OESポリシーのアタッチ

事前定義済のoracle/binding_oes_authorization_policyoracle/component_oes_authorization_policyまたはoracle/binding_oes_masking_policyのコピーを作成し、そのコピーをWebサービスにアタッチします。次の手順を実行します。

  1. ナビゲータ・ペインで「WebLogicドメイン」を開き、OES統合の構成が必要なドメインを表示します。ドメインを選択します。
  2. コンテンツ・ペインで、「WebLogicドメイン」「Webサービス」「ポリシー」の順にクリックします。
  3. oracle/binding_oes_authorization_policyoracle/component_oes_authorization_policyまたはoracle/binding_oes_masking_policyポリシーを選択してコピーを作成します。
  4. コピーの属性を編集します。(かわりに、後の手順で説明するように属性をオーバーライドすることも可能です。)

    use.single.step属性により、認可決定のためにOESにアクセスする方法が制御されます。2段階(ファイングレイン)方式または1段階(大まかな)方式です。デフォルトはfalseで、2段階(ファイングレイン)方式を使用します。一段階方式では責任を使用しませんが、条件で暗黙属性を使用できます。

    この属性は、oracle/binding_oes_authorization_policyおよびoracle/component_oes_authorization_policyポリシーで設定できます。oracle/binding_oes_masking_policyは常に2段階方式です。

    OESに基づいた認可設定では、リソース、アクションおよび制約のmatch値を定義するためにguard要素(orawsp:guardを参照)が使用されます。これらの値によって、guardの結果がtrueの場合にのみ、アサーション実行が許可されるようになります。つまり、アクセスしたリソース名およびアクションが一致した場合にのみ、アサーションの実行が許可されます。デフォルトで、リソース名およびアクションでは、ワイルドカードのアスタリスク(*)が使用され、すべてが許可されます。

    OESポリシーの作成時にリソースの命名規則に従った場合は、リソース名を明示的に設定する必要はありません。

  5. 「Webサービスを管理および保護するためのポリシーのアタッチ」で説明しているように、設計時またはデプロイ後にポリシーをアタッチします。

    OWSM oracle/binding_oes_authorization_policyポリシーまたはoracle/component_oes_authorization_policyポリシーを単体で、またはoracle/binding_oes_masking_policyポリシーと組み合せてアタッチします。

  6. オプションで、Fusion Middleware Control、WLSTまたはJDeveloper (または他のメカニズム)を使用して属性をオーバーライドします。OESポリシーの作成時にリソースの命名規則に従った場合、リソース・プロパティのオーバーライドは必須ではありません。

    オーバーライド可能な属性の説明は、「構成プロパティおよびオーバーライド」を参照してください。

    構成ポリシーのオーバーライドの詳細は、「ポリシー構成プロパティのオーバーライド」を参照してください。

  7. 「Webサービスを管理および保護するためのポリシーのアタッチ」で説明しているように、設計時またはデプロイ後に認証ポリシーもアタッチします。

10.5.6.2 構成のプロパティおよびオーバーライド

表10-1に示されているポリシーの構成プロパティは、ポリシーをアタッチする際に設定するか、オーバーライドできます。

OESポリシーの作成時にリソースの命名規則に従った場合、リソース名は導出され、プロパティのオーバーライドは必須ではありません。

一部の値のみオーバーライドし、残りはしなかった場合、残りは導出されます。

表10-1 OWSM OES構成プロパティ

名前 説明

application.name

OESに定義されたデプロイされたアプリケーション名。(SOAの場合、コンポジット名がアプリケーション名として使用されます。)

${}表記法を使用した値は、静的にも動的にもできます。

resource.type

OESに定義されたリソース・タイプ。${}表記法を使用した値は、静的にも動的にもできます。

  • SOAPアプリケーションの場合、WS_SERVICEである必要があります。

  • SOAコンポーネントの場合、COMPONENTである必要があります。

resource.name

OESに定義されたリソース名。${}表記法を使用した値は、静的にも動的にもできます。

  • SOAPおよびSOA参照の場合、web-service-name/port/web service operationの形式である必要があります。

  • SOAコンポーネントの場合、SOA component name/web service operationの形式である必要があります。

lookup.action

属性の参照時に使用されるアクションです。request.lookupまたはresponse.lookupを使用できます。

${}表記法を使用した値は、静的にも動的にもできます。

execute.action

実際の認可またはマスキングで使用されるアクションです。デフォルト値は、認可ユースケースではauthorize、マスキング・ユースケースではmaskです。

${}表記法を使用した値は、静的にも動的にもできます。

use.single.step

参照フェーズを省略するには、値をtrueに設定します。マスキング・ポリシーには適用されません。

reference.prioroty

ポリシー添付の優先順位を指定するオプションのプロパティ。

これらのプロパティでは、静的および動的値の両方を使用できます。動的値は1つ以上の${}演算子を使用し、ピリオドまたはスラッシュなどのセパレータ文字を使用できます。たとえば、resource.nameの値を${PORT}/${OPERATION}と指定した場合、それはmyPort/operationと解決されます。別の例として、${MODULE}.${SERVICE}myModule.myServiceと解決されます。

指定可能な動的値は次のとおりです。

  • APPLICATION

  • MODULE

  • SERVICE (SOAPおよびSOA参照の場合はWSDL Webサービス名です。

  • PORT (WSDLサービスのポート名)

  • OPERATION (SOAPのWebサービス操作。)

  • COMPOSITE (SOAコンポジット名)

  • COMPONENT (SOAコンポーネント名)

  • NAMESPACE

10.6 リクエスト元を指定するためのOracle HTTP Serverの構成

リクエスト元を指定するようにOracle HTTP Serverを構成できます。

制約一致プロパティ設定には、リクエストが内部ネットワークまたは外部ネットワークから発行されたかどうかを指定するrequestOriginフィールドが含まれています。このプロパティは、Oracle HTTP Serverを使用しており、Oracle HTTP Server管理者がカスタムのVIRTUAL_HOST_TYPEヘッダーをリクエストに追加した場合のみ有効です。

リクエスト元を指定するためにOracle HTTP Serverを構成するには、管理者が次のようにhttpd.confファイルを変更する必要があります。

  1. mod_headersモジュールがロードされていることを確認します。
  2. RequestHeader内でVIRTUAL_HOST_TYPEヘッダー名を設定します。有効な値は、internalおよびexternalです。次のコマンド構文を使用します。
    RequestHeader set|append|add|unset header [value [env=[!]variable]]
    

    たとえば、内部リクエストの仮想ホストを構成するには、次のように指定します。

    <VirtualHost *:7777>
    RequestHeader set VIRTUAL_HOST_TYPE  "internal" 
    </VirtualHost>
    

    外部リクエストの仮想ホストを構成するには、次のように指定します。

    <VirtualHost *:8888>
    RequestHeader set VIRTUAL_HOST_TYPE "external"
    </VirtualHost>
    

    これらの例で、プライベート・ネットワークの外部からのすべてのリクエストは、virtual host:8888を経由してルーティングされ、内部プライベート・ネットワークからのすべてのリクエストは、virtual host:7777を経由してルーティングされます。

    アプリケーションを外部のポートでも使用できるように、これらのポートをリスニング・ポートとしてhttpd.confファイルに追加する必要もあります。

  3. Oracle HTTP Serverを再起動します

10.7 Oracle Web Services ManagerでのOAuth2の使用

Oracle Web Services ManagerでOracle Mobile and Social OAuth2の認可フレームワークを使用できます。

トピック:

注意:

この項では、Oracle Access Manager with Oracle Security Token Service管理者ガイドの次の項に記載された用語、概念および構成情報をよく理解していることを前提としています。

10.7.1 Oracle Web Services ManagerでのOAuth2について

Oracle Web Services ManagerでのOAuth2のサポートは、OAuth 2.0 Authorization Frameworkの仕様に基づいています。

これは、http://tools.ietf.org/html/rfc6749で参照できます。

Oracle Web Services Managerでは、OAuth2.0プロトコル操作にOracle Mobile and Social OAuth2サービスを認可サーバーとして使用します。詳細は、Oracle Fusion Middleware Oracle Access Management管理者ガイドのMobile and Socialの理解に関する項を参照してください。

Oracle Web Services Managerでは、Webサービス・クライアントがMobile and Social OAuth2サーバーが実装するSOAPおよびRESTのWebサービスと対話し、2-legged認可を行うことができます。

10.7.1.1 2-legged OAuth2の理解

2-legged OAuth2では、アプリケーション間で対話が行われ、ユーザーによる承認は必要ではありません。

クライアントは、リソース所有者からの承認を要求します。応答で、クライアントはリソース所有者の認可を示す資格証明、認可付与を受け取ります。その後、次の手順を実行します。

  1. クライアントは、認可サーバーで認証し、認可付与を提示して、アクセス・トークン(AT)を要求します。

  2. 認可サーバーはクライアントを認証し、認可付与を検証して、有効であればATを発行します。

  3. クライアントは、リソース・サーバーの保護されたリソースを要求し、ATを提示して認証します。

  4. Oracle Web Services Managerサーバー側エージェントは、ATを検証し、有効な場合は要求を受け入れ、無効な場合は要求を拒否します。

クライアント・アプリケーションに、OAuth2クライアント・ポリシー(oracle/http_oauth2_token_client_policyoracle/oauth2_config_client_policyなど)を割り当てます。oracle/oauth2_config_client_policyポリシーの必須プロパティtoken.uriは、OAuth2サーバーのトークン・エンドポイントを指定します。

次の任意のOracle Web Services Manager JWTサービス・ポリシーもWebサービスに割り当てます。Oracle Web Services Managerのサーバー側エージェントがアクセス・トークンを検証します。

  • oracle/http_jwt_token_service_policy

  • oracle/http_jwt_token_over_ssl_service_policy

  • oracle/multi_token_rest_service_policy

  • oracle/multi_token_over_ssl_rest_service_policy

  • oracle/wss11_saml_or_username_token_with_message_protection_service_policy

  • oracle/http_oauth2_token_client_policy

  • oracle/http_oauth2_token_opc_oauth2_client_policy

  • oracle/http_oauth2_token_identity_switch_opc_oauth2_over_ssl_client_policy

  • oracle/http_oauth2_token_opc_oauth2_over_ssl_client_policy

  • oracle/http_oauth2_token_identity_switch_over_ssl_client_policy

  • oracle/http_oauth2_token_over_ssl_client_policy

  • oracle/http_oauth2_config_client_policy

10.7.1.2 2-Legged認可でサポートされる認可付与タイプ

前述のとおり、認可付与は、リソース所有者の認可を示す資格証明です。Oracle Web Services Managerでは、2-legged認可で次の認可付与タイプをサポートします。使用するタイプは、OAuth2 OWSMクライアント・プロファイルの構成時に指定します(Oracle Web Services Managerのポリシーと使用するためのOAuth2の構成を参照)。

  • クライアント資格証明付与: この場合、クライアント資格証明は「Authorization: Basic」HTTPヘッダーで送信されます(クライアント資格証明付与 - OAuth2.0認可フレームワークを参照)。

    アタッチされたoauth2クライアント・ポリシーのfederated.client.tokenプロパティを設定して、使用するユーザー名とパスワードを指定します。

  • クライアント資格証明JWT (フェデレーション・ユースケース): この場合、クライアント資格証明はJWTアサーションとして送信されます(クライアント認証のためのJWTの使用を参照)。

    Oracle Web Services Managerは、Oracle Web Services Manager資格証明ストアに保存されたクライアント資格証明に基づいてJWTトークンをローカルに生成します。クライアント・トークン・ポリシーのfederated.client.tokenプロパティを設定して、oauth2.client.csf.keyおよびkeystore.sig.csf.keyプロパティの値を使用してクライアントのJWTトークンを生成するかどうかを指定します。

    oauth2.client.csf.keyプロパティおよびkeystore.sig.csf.keyプロパティの値を使用して、クライアントのJWTトークンが生成されます。federated.client.tokenプロパティがTrueに設定されていることを確認します。

  • クライアント資格証明がBasic認証ヘッダーで送信され、これに加えて、ユーザー資格証明がJWTアサーションで送信されます(クライアント資格証明付与 - OAuth2.0認可フレームワークおよびクライアント認証のためのJWTの使用を参照)。

    アタッチされたoauth2クライアント・ポリシーのoauth2.client.csf.keyプロパティを設定して、Basic認証ヘッダーに使用するユーザー名とパスワードを指定します。

  • クライアント資格証明がJWTアサーションで送信され、これに加えて、ユーザー資格証明がJWTアサーションで送信されます(クライアント認証のためのJWTの使用を参照)。

10.7.1.3 2-Legged認可でのクライアント資格証明の決定方法

クライアント資格証明は、OAuth2サーバーへのリクエストに常に含まれます。federated.client.tokenプロパティにより、クライアント資格証明のクライアントIDにJWTを使用するか、またはクライアント資格証明のクライアントIDとパスワードを使用するかどうかが決まります。

  • federated.client.tokenがtrue (デフォルト)の場合は、JWTがクライアント資格証明のクライアントIDに使用されます。

  • federated.client.tokenがfalseの場合は、クライアント資格証明にクライアントIDとパスワードが使用されます。

10.7.1.4 2-Legged認可でのユーザー資格証明、クライアント資格証明およびサブジェクトの関係

subject.precedenceプロパティは、JWTトークンの作成のために使用するサブジェクトの取得場所を指定します。

表10-2に示すように、subject.precedenceをtrueに設定した場合、JWTトークンを作成するためのユーザー名は認証済サブジェクトからのみ取得されます。

subject.precedenceをfalseに設定した場合、JWTトークンを作成するためのユーザー名はcsf-keyプロパティからのみ取得されます。

表10-2 ユーザー資格証明、サブジェクトおよびアクセス・トークン

subject.precedence csf-key 認証済ユーザー・サブジェクト クライアント資格証明 ユーザー資格証明 アクセス・トークン・プリンシパル/サブジェクト

True(デフォルト)

該当なし

使用可能

2-Legged認可でのクライアント資格証明の決定方法を参照。

認証済エンド・ユーザーのJWT。

エンドユーザー名。

True(デフォルト)

該当なし

該当なし

2-Legged認可でのクライアント資格証明の決定方法を参照。

対象外

クライアントID

False

未構成(デフォルト)

該当なし

2-Legged認可でのクライアント資格証明の決定方法を参照。

対象外

該当なし

False

構成済

該当なし

2-Legged認可でのクライアント資格証明の決定方法を参照。

csf-keyエントリからのアイデンティティのJWT。

csf-key/user nameからユーザー名が構成されます。

10.7.2 OWSM OAuth2クライアントAPIについて

OAuth2クライアントAPI機能により、RESTクライアントを作成せずにアクセス・トークンを取得できます。APIのコンシューマはアクセス・トークンをフェッチし、任意のアウトバウンド・リクエストで使用できます。API呼出し元がこのOAuth2アクセス・トークンを使用し、OAuth2 Authサーバーで保護されているOAuth2リソース・サーバーのサービスをコールできます。

OWSMは次を実行します。
  • アクセス・トークンを取得するために認証および認可するOAuth2サーバーを起動します。

  • アクセス・トークンを使用してリソース・サーバーへのメッセージを保護します。

OWSMは、前述の機能を個別に実行できません。このOAuth2クライアントAPI機能を使用して、アクセス・トークンを取得するために認証および認可するOAuth2サーバーを起動できます。

この項には次のトピックが含まれます:

10.7.2.1 OWSM OAuth2クライアント資格証明の構成

OWSMは、プロセス全体の統合ソリューションとしてクライアント側のOAuth2をサポートします。このOAuth2クライアントAPI機能では、OAuth2サーバーへの個別のコールを実行できます。

OAuth2クライアント資格証明を構成し、クライアント・アプリケーションを起動してアクセス・トークンを取得するプロセスは、次の手順で構成されます。
  1. Oauthサーバーのクライアントの登録セクションでクライアントを登録し、次のフィールドを更新する必要があります。
    • 名前 - クライアントIDと異なるクライアント名を選択します。

    • アクセス可能なリソース - このクライアントにアクセス可能である適切なリソースを選択します。

    • 信頼できるクライアント - 当分の間このチェックを無視できます。クライアント側構成が行われてから、後でクリックして証明書をアップロードできます。

    • すべての必要な値を指定した後、「登録」をクリックします。

  2. OAuth 2クライアントAPIとともに使用されるクライアント・ポリシーのアタッチ

    注意:

    LPAまたはGPAを使用して、OWSMポリシーをアタッチできます。oauth2構成ポリシーをGPAとしてアタッチし、http_oauth2_token_over_ssl_client_policyをLPAとしてアタッチすることをお薦めします。
  3. クライアント・ドメインのOAuth2クライアント資格証明を構成する必要があります。
    1. 機密の表示をクリックして、OAuth2サーバーの登録済クライアントのクライアントIDおよび機密を取得します。

      注意:

      OAuth 2クライアントは、OWSM OAuth 2クライアントAPIを操作する信頼できるクライアントである必要があります。
    2. クライアント・ドメインに接続し、次のWLSTを実行してCSFストアのクライアント資格証明を構成します。
      createCred(map="oracle.wsm.security", key="<replace with OAuth2 server>", user="<replace withe OAuth 2 client id>”, password="<replace with Oauth2
  4. クライアント・ドメインでキーストアを設定する必要があります。

    注意:

    12cでは、KSSは使用されるデフォルトのキーストアです。
    1. クライアント・ドメインに接続し、次のWLSTを実行します。
      svc = getOpssService(name='KeyStoreService')
      svc.createKeyStore(appStripe='owsm', name='keystore', password='',permission=true)
    2. キー・ペアを生成します。
      svc.generateKeyPair(appStripe='owsm', name='keystore', password='', dn='CN=OWSM, OU=ST, O=Oracle, L=RedWood, ST=CA, C=US', keysize='2048', alias

      注意:

      Orakeyは、クライアント・リクエストを署名するデフォルトの鍵の別名です。OAuth 2サーバーに送信されるクライアントおよびユーザー・アサーションを署名するには、鍵を使用します。信頼できるOAuth 2クライアントとして、署名証明書をOAuth 2サーバーにアップロードする必要があります。
  5. クライアント・コードを更新して、OWSM OAuth2クライアントAPIを使用します。
    これは、サンプルのサーブレット・ベースのアプリケーションを示します。次のようにサーブレット・クライアント・コードを更新します。
    package client.jaxrs;
    import java.io. IOException;
    import java.io.PrintWriter;
    import java.security.AccessController;
    import java.util.Date;
    import javax.security.auth.Subject;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import oracle.wsm.metadata.feature.PolicyReferenceFeature;
    import oracle.wsm.metadata.feature.PolicySetFeature;
    import oracle.wsm.metadata.feature.PropertyFeature ;
    import oracle.wsm.security.oauth2.OAuth2ClientTokenManager;
    import oracle.wsm.security.oauth2.OAuth2TokenContext;
    import oracle.wsm.security.oauth2.OAuth2TokenResponse;
    import oracle.wsm.security.util.SecurityConstants;
    public class SampleClient extends HttpServlet {
    public void init(ServletConfig config) throws ServletException {   
     super.init(config);
    }
    /**
    * set OWSM Policy details
    * @return
    * @return
    */
    private PolicySetFeature createOWSMPolicySetFeature() {
    PropertyFeature  tenantName new  PropertyFeature (
    SecurityConstants.ConfigOverride.CO_USER_TENANT_NAME, inoracleindiatrial52406”)
    PolicyReferenceFeature[] clientPRF = new PolicyReferenceFeature[] {
    new PolicyReferenceFeature (“oracle/http_oauth2_token_over_ssl_client_policy”,
    new PropertyFeature[]{ tenantName}) };
         PolicySetFeature policySetFeature = new PolicySetFeature(clientPRF);     
         return policySetFeature;
    }     
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {    
    response.setContentType(“text/html;charset=UTF-8”);     
    PrintWriter out = response.getWriter();       
    try {     
    OAuth2ClientTokenManager oauth2ClientTokenManager = OAuth2ClientTokenManager.getInstance ();
    OAuth2TokenContext oauth2TokenContext = OAuth2ClientTokenManager.getOAuth2TokenContext ();
    PolicySetFeature policySetFeature = createOWSMPolicySetFeature ();
    oauth2TokenContext.setPolicySetFeature(policySetFeature);
    oauth2ClientTokenManager.getAccessToken(oauth2TokenContext);
    OAuth2TokenResponse oauth2TokenResponse = oauth2TokenContext.getOAuth2TokenResponse();
    String accessToken = oauth2TokenResponse.getAccessToken ();
    String tokenType = oauth2TokenResponse.getTokenType ();
    long expiresIn = oauth2TokenResponse.getExpiresIn();
    out.println (“<br><b> accessToken:<br><b>" + accessToken);
    out.println (“<br><b> tokenType : <b>" + tokenType);
    out.println (“<br><b> expiresInSec : <b>" + new Date(System.currentTimeMillis() + expiresIn * 1000)); 
    out.println (“<br>; ;---------------------------request processed------------------------“);     
    } catch (Exception e) { 
    e.printStackTrace(); 
    out.println(“Exception is : “ + e + “; exc messaage is: “ + e.getMessage());
    }
    } 
    public void destroy () {
    super.destroy ();
       }
    }
  6. WLSTを使用して、oracle.wsm.security.WSIdentityPermissionをクライアント・アプリケーションに提供します。
    grantPermission(appStripe=None, codeBaseURL='file:${common.components.home}/modules/oracle.wsm.common/wsm-agent-core.jar',principalClass=None
  7. クライアント管理サーバーに接続し、次のWLSTを実行してクライアントの署名証明書をファイルにエクスポートします。
    svc.exportKeyStoreCertificate(appStripe='owsm', name='keystore', password='', alias='orakey', keypassword='welcome1', type='Certificate',filepath
  8. 信頼クライアントにOAuthサーバーを構成します。
    1. OAuth構成に移動し、クライアントを変更します。
    2. クライアントを信頼し、クライアント環境で生成された証明書ファイルをアップロードします。
  9. クライアント・アプリケーションを起動して、アクセス・トークンを取得します。
    1. クライアント・アプリケーションをデプロイし、ブラウザからURLを起動します。

      注意:

      OAuth2サーバーからアクセス・トークンとともに正常なレスポンスを確認できます。このATを使用して、リソース・サーバーにデプロイされているリソースを起動できます。

10.7.3 Oracle Web Services Managerのポリシーと使用するためのOAuth2の構成

Oracle Web Services Managerとともに使用するためにMobile and Social OAuth2を構成する前提条件として、構成情報を理解している必要があります。

詳細は、Oracle Access Manager with Oracle Security Token Service管理者ガイドを参照してください。

Oracle Web Services Managerとともに使用するためのOAuth2の構成の詳細は、Oracle Fusion Middleware Oracle Access Management管理者ガイドのOAuthサービスの構成に関する項を参照してください。

10.7.4 OAuthポリシーのユーザー名/パスワードによるユーザー・アサーションの有効化

Weblogicドメインに複数のアプリケーションが存在するため、各アプリケーションに異なる一般ユーザーが割り当てられます。

一意のユーザー名/パスワードを使用したユーザー・アサーションは、OAuthポリシーをアタッチして有効化されます。ユーザー・アサーションにアタッチされる2つの新しいポリシーは、次のとおりです。
  • http_oauth2_token_with_resource_owner_creds_client_policy

  • http_oauth2_token_with_resource_owner_creds_over_ssl_client_policy.

クライアント側のOAuthポリシー - grant_type (そのデフォルト値/欠落は、grant_typeがclient_credentialsであることを意味します)には、新しい構成オーバーライドが含まれます。

オーバーライド・プロパティでgrant_typeを追加します。これらのポリシーで、grant_typeがパスワードに設定されます。

注意:

grant_typeがパスワードの場合、csf-keyを使用してoauthサーバーへのリクエストのヘッダーでユーザー名とパスワードが設定されます。
OAuthポリシーでは、次の操作を実行します。
  • 基本認証フローを使用したリソース所有者パスワード資格証明の割当て

  • JWT Bearerフローを使用したリソース所有者パスワード資格証明の割当て

OAuthポリシーが次の方法でアタッチされます。
  • ポリシーのアタッチおよびプログラムによる構成オーバーライドの指定

  • WLSTからのOAuth構成ポリシーのアタッチ

  • EMからのOAuth構成ポリシーのアタッチ

注意:

リソース所有者パスワード資格証明の付与タイプは、デバイス・オペレーティング・システムや強い権限を持っているアプリケーションなど、リソース所有者がクライアントと信頼関係にある場合に適しています。認可サーバーではこの付与タイプを有効化する際に特に注意し、他のフローが実行可能でない場合にのみ許可する必要があります。

10.7.5 OAuthベースの匿名ユーザー認証について

OWSMはOAuthベースの匿名ユーザー・アクセスをサポートしています。

REST APIにアクセスするために(匿名または非匿名)、呼出しが行われ、OAuthクライアントIDとクライアント・シークレットが生成されます。匿名ユーザーは、RESTエンドポイントにアクセスするのに自分のユーザー資格証明を使用しません。非匿名APIは認証を要求しますが、匿名APIはユーザー認証を要求せずにエンドポイントを呼び出すことをアプリケーションに許可します。

注意:

匿名APIは公開されていませんが、認証ヘッダーにアクセス・トークンを必要とします。

OAuthベースの匿名ユーザー・アクセスをサポートするために、OWSMにはポリシー・プロパティenable_anonymous_client_atがあります。トークンのclient_id値とsub値が同じである場合、Identity Cloud Serviceにユーザーが存在しない場合でも、このプロパティはサブジェクトを匿名として確立します。

値がtrueの場合、この構成オーバーライドenable_anonymous_client_atは、Identity Cloud Serviceからのクライアント・アクセス・トークンを匿名トークンとして使用します。ポリシーのデフォルト値はfalseで、この構成をtrueに設定することで有効化されます。構成がtrueに設定されている場合、OWSMはユーザーを匿名で認証し、Identity Cloud Serviceクライアント・アクセス・トークンが検証された後、匿名サブジェクトを作成します。

次のOWSMポリシーにはenable_anonymous_client_atプロパティがあります。
oracle/http_jwt_token_over_ssl_service_policy
oracle/http_jwt_token_service_policy 
oracle/http_oam_token_service_policy 
oracle/multi_token_cg_sso_over_ssl_rest_service_policy 
oracle/multi_token_cg_sso_over_ssl_rest_service_policy 
oracle/multi_token_cg_sso_rest_service_policy 
oracle/multi_token_cg_sso_rest_service_policy 
oracle/multi_token_over_ssl_rest_service_policy 
oracle/multi_token_over_ssl_rest_service_policy 
oracle/multi_token_rest_service_policy 
oracle/multi_token_rest_service_policy 
oracle/multi_token_sso_over_ssl_rest_service_policy 
oracle/multi_token_sso_over_ssl_rest_service_policy 
oracle/multi_token_sso_rest_service_policy 
oracle/multi_token_sso_rest_service_policy

multi_tokenポリシー内のJWTおよびOAMアサーションには、enable_anonymous_client_at構成オーバーライドがあります。

次に、WLSTを使用してポリシーをアタッチし、構成オーバーライドを変更する例を示します。

beginWSMSesion()
createWSMPolicySet('rest-resource-policy-set', 'rest-resource','Domain("*")')
attachWSMPolicy('oracle/multi_token_rest_service_policy')
commitWSMSession()
 
beginWSMSession()
selectWSMPolicySet('rest-resource-policy-set')
setPolicySetPolicyOverride('oracle/multi_token_rest_service_policy', 'enable_anonymous_client_at', 'true')
commitWSMSession()

10.7.6 OAuthトークン検証のマルチテナントのサポートについて

有効な信頼証明書がトラスト・ストアにインポートされると、OWSMはOAuthトークンを検証します。

複数のテナントをサポートするシナリオでは、すべてのテナント(作成済またはまだ作成されていない)の信頼証明書をトラスト・ストアにインポートするか、検出機能を使用して、OAuthトークンを検証します。

検出機能は、OWSMがIdentity Cloud Service (IDCS)から必要な信頼証明書をフェッチし、これを使用してOAuthトークンを検証するのに役立ちます。検出機能を使用し、REST APIを使用してグローバル・レベルで信頼を設定します。すべてのテナントがグローバル情報を使用して信頼を設定します。

IDCSの場合、グローバル検出情報にテナント情報は含まれず、テナントのJWK/検出情報にアクセスするために使用されます。

注意:

単一インスタンス環境で複数のテナントの検出機能をサポートする要件は、各テナントが独自のデータベースを持つ、階層化されたマルチテナント・シナリオとは異なります。

関連項目:

  • グローバル検出構成のインポートおよび信頼ドキュメント名の構成のエクスポートを行うREST APIメソッドについては、『Oracle Web Services Managerでの資格証明およびキーストアの管理のためのREST API』のトークン発行者の信頼構成の管理に関する項を参照してください。

10.8 サード・パーティ・サーバーとのOWSMの統合の理解

OWSMは、Google OAuth2サーバーおよびTwitter OAuthサーバーなどのサード・パーティ・サーバーと統合されます。

この項では、OWSM統合を使用可能にする方法について説明します。

10.8.1 Twitter OAuthサーバーとのOWSMの統合について

OWSMはtwitterに統合されます。TwitterではOAuth1を使用して、認可アクセスをAPIに提供します。

REST APIは、Twitterデータの読取りおよび書込みを行うプログラムによるアクセスを提供します。新しいTweetを作成し、作成者プロファイルおよびフォロワ・データなどを読み取ります。REST APIは、OAuthを使用してTwitterアプリケーションおよびユーザーを識別します。レスポンスをJSONで取得できます。

OWSMは、OWSMのOAuth 1.0プロトコルの部分サポートを提供してOAuth1タイプのアクセス・トークンおよびトークン・シークレットを使用してTwitter APIへのリクエストを保護する必要がある単一ユーザーのOAuthユースケースをサポートします。この場合、アクセス・トークンを操作してTwitterリソースの署名付きリクエストを行うポイントからです。

OWSMでは、静的に生成されたコンシューマおよびアクセス・トークンを使用してアプリケーションによるTwitter APIの使用を許可する新しいOAuth1クライアント・ポリシーを提供します。アクセス・トークンの取得はOWSMポリシーによって行われません。

TwitterアカウアントをOWSMに統合するには、次を実行します。
  • Twitterアカウントを構成する前提条件

  • OWSMと統合するTwitterアカウントの構成

10.8.1.1 Twitterアカウントを構成する前提条件

Twitterでは、現在ほとんどの認証方式にOAuth1プロトコルを使用しています。OAuth2 Bearerトークンは、アプリケーション専用認証にのみサポートされます。OWSMのOAuth1プロトコルの部分サポートを提供してOAuth1タイプのアクセス・トークンおよびトークン・シークレットを使用してTwitter APIへのリクエストを保護する必要がある単一ユーザーのOAuthユースケースに焦点を当てます。

OAuthを使用するには、アプリケーションで次を実行する必要があります。

10.8.1.2 OWSMと統合するTwitterアカウントの構成

Twitterアカウント設定

アクセス・トークンを取得した後、twitterアカウントを構成できます。次の手順に従って、メッセージをツイートするRESTアプリケーションを作成および実行します(ステータスを更新します)。

  1. https://twitter.com/でTwitterユーザー・アカウントを作成します。

  2. このアカウントを使用して、https://apps.twitter.comに移動します。

  3. 「Create New App」をクリックして、新しいアプリケーションを作成します。すべての詳細を入力します。

  4. アプリケーションをクリックします。

  5. タブ「Key and Access Tokens」をクリックします。

  6. コンシューマ・キーおよびシークレット、アクセス・トークンおよびシークレットを生成します。

  7. 後で必要になるため、4つのすべてのキー - コンシューマ・キー、コンシューマ・シークレット、アクセス・トークン、アクセス・トークン・シークレットをメモします。

資格証明の構成

  1. コンシューマ・キーおよびコンシューマ・シークレットの値を保持するCSFキーを作成します。

    例: updateCred(map="oracle.wsm.security", key="basic.client.oauth1.credentials", user="NMugHF4zz3ywchygNsXHy", password="XhcrhgVzAHWmerW4JN20xLrv3FliwlbIYPqTnbntUyY9wB", desc="Twitter account consumer key")

  2. アクセス・トークンおよびアクセス・トークン・シークレットの値を保持するCSFキーを作成します。

    例: updateCred(map="oracle.wsm.security", key="basic.token.oauth1.credentials", user="778014527828787200-3e7LqGPB79ve0Bbo8Z0acvl7op2", password="ZAVO3BsBNxGMsR7kwGeX3efhqQ2psQvcdvuLLCYXb", desc="Twitter account access token") 

トラストストアの構成

Twitter SSL証明書をキーストアにインポートする必要があります

  1. twitter SSL証明書をローカル・ファイルにエクスポートします。これをtwitter.crtと呼ぶことにします。ブラウザを使用して、SSL証明書をエクスポートできます。たとえば、Firefoxを使用している場合、次のようにエクスポートできます。

    • 下部のtop / PadlockでSSL証明書アイコンをクリックします。

    • 「Details」タブをクリックします

    • 階層から使用する証明書を選択します[図で囲まれていない]

    • 「Export」をクリックします

  2. この証明書をトラストストアにインポートします。たとえば、JKSを使用している場合、次のようにインポートします。
    • keytool -import -keystore client-truststore.jks -storepass changeit -file twitter.crt

JDeveloperを使用したRESTfulクライアントの作成

Twitter OAuthサーバーとの統合をテストするには、OWSM OAuth1 Twitterクライアント・ポリシーを使用してTwitter APIのいずれかを起動するWebアプリケーションを作成する必要があります。ここで提供されているサンプルでは、https://api.twitter.com/1.1/statuses/update.json URLでTweet APIにアクセスします。

クライアント・アプリケーションを作成するには、次の手順を実行します。

  1. JDeveloperを起動します。

  2. 新規アプリケーションおよびプロジェクトの作成

  3. 前述で作成した新しいプロジェクトを右クリックして、新しいHTTPサーブレットを選択します(表示されていない場合、「ギャラリ」メニューの「新規」から、「Web層」、「サーブレット」、「HTTPサーブレット」の順に選択します)。

  4. 次のコード・ブロックで示されているコンテンツを使用して、この新しいサーブレットを編集します。

    POSTリクエストのTwitter RESTクライアントのサンプル・コード

    GETリクエストのTwitter RESTクライアントのサンプル・コード

  5. 必要に応じて、必要なOWSMおよびJERSEYライブラリを追加します。

  6. プロジェクトを保存し、すべてのインポートが解決され、ビルドの問題がないことを確認します。

  7. WebアプリケーションをWLSサーバーにデプロイします。プロジェクトを右クリックし、「デプロイ」、「webapp」の順に選択します。JDEVで構成している場合はアプリケーション・サーバーに直接デプロイし、そうでない場合はWARファイルにデプロイし、WLSコンソールを使用してこのWARファイルを手動でデプロイします。

ブラウザからwebappをテストします。ブラウザに出力される他のメタデータとともにTwitter APIからステータス200を受け取ります。アカウントwww.twitter.comにログインし、OWSMポリシーを使用して送信したツイートを監視できます。

10.8.2 Google OAuth2サーバーとのOWSMの統合について

OWSM OAuth2クライアントは、Google OAuth2クライアントのSSLポリシーを使用して、Google OAUTH2サーバーと統合できます。Google APIでは、アクセスを必要とするクライアント・アプリケーションを認証および認可するOAuth 2.0プロトコルを使用します。

OWSMの場合、Google OAuth 2.0は、サーバー・アプリケーションとGoogle APIのサーバー間相互作用をサポートします。これは、サーバー・アプリケーションがJWTトークンを送信してOAuthサーバーからアクセス・トークン(AT)を取得し、そのATを使用してGoogle APIにアクセスする2-legged OAuth2シナリオです。このシナリオでは、個別のエンド・ユーザーではなくアプリケーションに属するアカウントであるサービス・アカウントが必要です。クライアント・アプリケーションでは、ユーザーではなくサービス・アカウントのかわりにGoogle APIを起動します。

10.8.2.1 Google APIコンソールを使用したGoogleプロジェクトの作成

各クライアントには、Google OAUTH2サーバーにアクセスする一意の資格証明があります。クライアント・アプリケーションをGoogle APIコンソールに登録して、Googleおよびアプリケーションが認識するクライアントIDおよびクライアント・シークレットなどのクライアント資格証明を取得する必要があります。Google Sign-In for Websitesドキュメントhttps://developers.google.com/identity/sign-in/web/devconsole-projectの説明に従って、Google APIコンソール・プロジェクトおよびクライアントIDを作成します。

10.8.2.2 Googleサービス・アカウントの構成

Googleサービス・アカウントの作成

Googleサービス・アカウントを構成してOWSMクライアントとGoogle OAUTH2サーバーを統合する必要があります。

Google Identity Platformドキュメントhttps://developers.google.com/identity/protocols/OAuth2ServiceAccount#creatinganaccountの説明に従って、Googleサービス・アカウントを作成する必要があります。

注意:

  1. 失われた場合に再生成できないため、マシンにGoogleが生成した秘密/公開鍵を記録します。

  2. 再表示されないため、秘密鍵のパスワードを記録します。

アクセス・トークン・リクエストおよびレスポンス

Google APIにアクセスするGoogle認可サーバーからのクライアント・アプリケーション・リクエスト・アクセス・トークン。

単一のアクセス・トークンは、複数のAPIへの様々なアクセスを付与できます。スコープという変数パラメータは、アクセス・トークンが許可するリソースおよび操作のセットを制御します。アクセス・トークン・リクエスト中に、アプリケーションはスコープ・パラメータの1つ以上の値を送信します。

アプリケーションがユーザーを偽装する前にこのタイプの偽装を実行する権限を付与する必要があり、通常ドメイン管理者によって処理されます。ドメイン管理の詳細は、APIクライアント・アクセスの管理を参照してください。

OAUTH2サーバーがクライアントのリクエストを正常に検証してから、クライアントは取得したレスポンスからアクセス・トークンを抽出し、トークンをアクセスする必要があるGoogle APIに送信します。トークン・リクエストのスコープに示されている操作およびリソースのセットにのみ、アクセス・トークンが有効です。

注意:

アクセス・トークンの有効期限の処理: 一度取得したアクセス・トークンは有効期限が切れるまでキャッシュされます。有効期限が切れると、OWSMは別のアクセス・トークンを自動的に取得し、有効期限が切れるまでキャッシュします。

10.8.2.3 Google APIの有効化

Google OAuth2サーバーが特定のGoogle APIのアクセス・トークンのクライアントのリクエストを検証できるように、作成されたプロジェクトでGoogle Developers ConsoleのAPIを有効化する必要があります。
次の手順に従って、アプリケーションがアクセスする必要があるAPIを有効化します。
  1. 必要な資格証明を使用して、Google Developers Consoleにログインします。

  2. Google API Managerページの「Overview」をクリックします。

  3. 「Enabled APIs」タブをチェックして、アクセスするAPIがすでに有効化されているかどうかを確認します。有効でない場合、「Google APIs」タブに移動して、探しているAPIを検索します。

  4. 必要なAPIをクリックして、上部の「Enable」ボタンをクリックします。

  5. 「Enabled APIs」タブに戻って、新しく有効化したAPIがリストに表示されていることを確認します。

10.8.2.4 クライアント・アプリケーションのキーストアの構成

クライアント・アプリケーションのキーストアを構成する前に、OWSMドメインのJavaキーストア(JKS)を作成していることを確認します。「秘密鍵の生成およびJavaキーストアの作成」を参照してください。
キーストアを構成するには、次の手順に従ってください。
  1. keytoolユーティリティを使用して、PKCS#12キーストア(このキーストアは、Googleサービス・アカウントの作成後に取得されます)をJKSキーストアにインポートします。

    keytool -importkeystore -srckeystore <location of the .p12 file>-srcstoretype PKCS12 -destkeystore <OWSM keystore location> -deststoretype JKS

    srcおよびdestキーストア・パスワードを入力します。(ヒント: srcパスワードは、Google Service Accountの作成後に書き留めたものです。エントリがキーストア「privatekey」に追加されたことを確認します。

  2. キーストアのコンテンツを表示するためにkeytool -listコマンドを使用します。

    keytool -keystore <OWSM keystore location> -list
  3. コマンドラインでimportKeyStoreスクリプトを使用してキーストアから1つ以上の別名をインポートするには、WLSTを使用します。
    [userx@hostname bin]$ ./wlst.sh 
    
    Initializing WebLogic Scripting Tool (WLST) ...
    
    Welcome to WebLogic Server Administration Scripting Shell
    
    Type help() for help on available commands
    
    wls:/offline> connect("weblogic","password","t3://myhost.example.com:8001")
    Connecting to t3://myhost.example.com:8001 with userid weblogic ...
    Successfully connected to Admin Server "jrfServer_admin" that belongs to domain "jrfServer_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.
    
    wls:/jrfServer_domain/serverConfig/> svc = getOpssService(name='KeyStoreService')
    
    wls:/jrfServer_domain/serverConfig/> svc.importKeyStore(appStripe='owsm', name='keystore', password='password', aliases='privatekey', keypasswords='notasecret', type='JKS', permission='true', filepath='<OWSM keystore location>')
  4. ここで示されている手順に従って、cwallet.ssoに新しい資格証明(google-service-credentialなど)を作成します。資格証明の名前は、Googleサービス・アカウントの作成後に生成されるサービス・アカウントの電子メールIDです。パスワードは問いません。

10.8.2.5 JDeveloperを使用したGoogle OAuthエンドポイントとの統合の確認

Google OAuth2サーバーとの統合をテストするには、OWSM OAuth2 Googleクライアント・ポリシーを使用してGoogle APIのいずれかを起動してアクセス・トークンを取得するWebアプリケーションを作成する必要があります。ここで示されているサンプルでは、次のGoogle Drive APIにアクセスします。
"https://www.googleapis.com/drive/v2/files" URL.
手順に従って、クライアント・アプリケーションを作成します。
  1. Oracle JDeveloperの起動:
    1. UNIXシステム:
      • システムの次の場所に移動します: JDEV_HOME/jdeveloper/jdev/bin/

      • 次のコマンドを実行します: ./jdev

    2. Windows:
      コマンドラインで次のいずれかのコマンドを実行して、Oracle JDeveloperを起動します。
      • JDEV_HOME\jdeveloper\jdeveloper.exe

      • JDEV_HOME\jdeveloper\jdev\bin\jdevw.exe

  2. 『Oracle Fusion Middleware Oracle JDeveloperによるアプリケーションの開発』のカスタム・アプリケーションの作成方法に関する項の説明に従って、JDeveloperを使用してカスタム・アプリケーションを作成します。
  3. アプリケーションに自動作成されるデフォルトのプロジェクトを削除します。
  4. 新規カスタム・プロジェクトの作成:
    1. 「アプリケーション」ウィンドウで、新しいプロジェクトを含むアプリケーションを開きます。
    2. 「アプリケーション・メニュー」アイコンをクリックして「新規プロジェクト」を選択し、「新規ギャラリ」の「プロジェクト」ページを開きます。
    3. 「項目」で、「カスタム・プロジェクト」.を選択します
    4. 「OK」をクリックします。
  5. HTTPサーブレットを生成するには:
    1. 「アプリケーション」ウィンドウで、新規サーブレットを作成するためのプロジェクトを選択します。
    2. メイン・メニューから、「ファイル」→「新規」→「ギャラリから」→「Web層」→「サーブレット」を選択するか、右クリックして「新規」を選択します。新規ギャラリが表示されます。
    3. 「項目」リストで「HTTPサーブレット」をダブルクリックし、「HTTPサーブレット作成」ウィザードを開きます。
  6. 次のコード・ブロックで示されているコンテンツを使用して、この新しいHTTPサーブレットを編集します。
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.*;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.*; 
    import javax.ws.rs.client.Client;
    import javax.ws.rs.client.ClientBuilder;
    import javax.ws.rs.client.WebTarget;
    import javax.ws.rs.core.Response; 
    import org.glassfish.jersey.client.ClientConfig; 
    import oracle.wsm.metadata.feature.AbstractPolicyFeature;
    import oracle.wsm.metadata.feature.PolicyReferenceFeature;
    import oracle.wsm.metadata.feature.PolicySetFeature;
    import oracle.wsm.metadata.feature.PropertyFeature;
    import oracle.wsm.security.util.SecurityConstants; 
    @WebServlet(name = "TestClient", urlPatterns = { "/testclient" })
    public class TestClient extends HttpServlet {
        private static final String CONTENT_TYPE = "text/html; charset=UTF-8"; 
        public void init(ServletConfig config) throws ServletException {
            super.init(config);
        }
       public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType(CONTENT_TYPE);
            PrintWriter out = response.getWriter();
            out.println("<html>");
            out.println("<head><title><TestClient>/title</title></head>");
            out.println("<body>");
            out.println("<p>The servlet has received a GET. This is the reply.</p>");
           Client client = null;
                    ClientConfig cc = null;
                    try {
                       String BASE_URI = "https://www.googleapis.com/drive/v2/files";
                        PropertyFeature tokenUri = new PropertyFeature(
                            SecurityConstants.ConfigOverride.CO_TOKEN_URI,
                            "https://accounts.google.com/o/oauth2/token");
                         PropertyFeature csfKey = new PropertyFeature(
                            SecurityConstants.ConfigOverride.CO_CSF_KEY,
                           "google-service-credential");
                        PropertyFeature oauth2CsfKey = new PropertyFeature(
                           SecurityConstants.ConfigOverride.CO_OAUTH2_CLIENT_CSF_KEY,
                            "google-service-credential");
                      PropertyFeature signCsfKey = new PropertyFeature(
                            SecurityConstants.ConfigOverride.CO_SIG_CSF_KEY, "privatekey");
                        PropertyFeature scope = new PropertyFeature(
                            SecurityConstants.ConfigOverride.CO_CUSTOM_JWT_CLAIMS,
                            "scope=https://www.googleapis.com/auth/drive");
                        PolicyReferenceFeature[] clientPRF = new PolicyReferenceFeature[] {
                            new PolicyReferenceFeature(
                                "oracle/oauth2_config_client_policy", tokenUri),
                            new PolicyReferenceFeature(
                               "oracle/http_oauth2_token_over_ssl_google_jwt_client_policy",
                                new PropertyFeature[] { csfKey, oauth2CsfKey, signCsfKey, scope }) };
                        cc = new ClientConfig();
                     cc.property(AbstractPolicyFeature.ABSTRACT_POLICY_FEATURE,
                            new PolicySetFeature(clientPRF));
                        client = ClientBuilder.newClient(cc);
                        WebTarget webTarget = client.target(BASE_URI);
                         Response rest_response = webTarget.request("application/json").get(
                           Response.class);
                        int status = rest_response.getStatus();
                       String textEntity = rest_response.readEntity(String.class);
                         out.println("Response status :" + status);
                            out.println("Response from Google Drive API :" + textEntity);
                out.println("</body></html>");
            } finally {
                      client.close();
                      out.close();
                  }
        }
    }     
  7. 次のようにJAX-RS Jersey 2.xライブラリをプロジェクトに追加します。
    1. 「アプリケーション」ウィンドウでプロジェクトを選択した状態で、「プロジェクト・プロパティ」ダイアログを開きます。
    2. 「ライブラリとクラスパス」ノードを選択します。
    3. 「ライブラリの追加」をクリックします。
    4. 「拡張」でJAX - RS Jersey 2.xを選択して、「OK」をクリックします。
  8. 次のようにwsm-policy-core.jarおよびwsm-secpol.jarファイルをプロジェクトに追加します。
    1. 「アプリケーション」ウィンドウでプロジェクトを選択した状態で、「プロジェクト・プロパティ」ダイアログを開きます。
    2. 「ライブラリとクラスパス」ノードを選択します。
    3. 「ライブラリとクラスパス」ページで「JAR/ディレクトリの追加」をクリックします。
    4. 「参照」をクリックして、JDEVホームまたはJDEVインストールの場所/oracle_common/module/oracle.wsm.common/wsm - policy - core.jarに移動して「開く」をクリックします。
    5. 前述の手順を繰り返して、wsm-secpol.jarファイルをインストールします。
  9. プロジェクトを保存し、すべてのインポートが解決され、ビルドの問題がないことを確認します。
  10. 『Oracle Fusion Middleware Oracle JDeveloperによるアプリケーションの開発』のアプリケーションのデプロイに関する項の説明に従って、Oracle WebLogic Serverを使用してWebアプリケーションをデプロイします。
  11. WSIdentityPermissionをクライアント・アプリケーション(たとえば、webapp)に追加する必要があります。これにより、csf-keyに示されているアイデンティティのかわりにクライアント・アプリケーションを操作できます。次のようにWLSTコマンドを実行して、権限を追加します。
    grantPermission(appStripe=None, codeBaseURL='file:${common.components.home}/modules/oracle.wsm.agent.common_${jrf.version}/wsm-agent-core.jar',principalClass=None,principalName=None,permClass='oracle.wsm.security.WSIdentityPermission',permTarget='resource=webapp',permActions='assert')
    
  12. ブラウザでURL http://hostname:port/GoogleOAuthClient/testclientを実行して、アプリケーションをテストします。ブラウザに出力される他のメタデータとともにGoogle Drive APIからステータス200を受け取っていることを確認します。