ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発
2.0
E56274-01
  目次へ移動
目次

前
 
次
 

21 モバイル・アプリケーションの保護

この章では、Oracle Mobile Application Frameworkでのセキュリティ・フレームワークの概要について、およびセキュリティが適用されるようにモバイル・アプリケーションを構成する方法について説明します。

この章には次の項が含まれます:

21.1 モバイル・アプリケーション・フレームワークのセキュリティについて

保護されているアプリケーション機能がアクティブ化されているとき、MAFによってログイン・ページがユーザーに対して表示されます。たとえば、アプリケーション機能がWebビュー内に表示されようとしているときやオペレーティング・システムがアプリケーションをフォアグラウンドに戻したときなどに、ログイン・ページがユーザーに表示されます。MAFは、アプリケーション機能が認証サーバーによって保護されている場合や、アプリケーション機能にユーザー・ロールまたは権限に基づく制約が含まれる場合に、アプリケーション機能へのアクセスで認証が必要かどうかを判断します。MAFは、ユーザーが有効な資格証明を入力した場合にのみ、目的のWebビュー、UIコンポーネントまたはアプリケーション・ページをレンダリングします。

アプリケーション機能のいずれかにこれらの条件がある場合、ユーザーはログインに成功しないとモバイル・アプリケーションにアクセスできないことがありますが、保護されておらず、かつアクセス関連の制約がないデフォルトのアプリケーション機能を含めることによって、保護されているアプリケーション機能と保護されていないアプリケーション機能の両方を含むモバイル・アプリケーションに、ユーザーがアクセスできるようにできます。この状況では、ユーザーは認証なしでMAFアプリケーションにアクセスできます。デフォルトのアプリケーション機能によって、これらの匿名ユーザーに、モバイル・アプリケーションへのエントランス・ポイントが提供され、これらのユーザーは保護されていないデータを表示でき、保護されたアプリケーション機能にアクセスするときには、リモート・サーバーに対して認証されます。保護されていないデフォルトのアプリケーション機能は、次のように指定できます。


注意:

MAFでは、アプリケーション・ログイン・プロセスがアプリケーションの初期化フローから切り離されているため、匿名ユーザーが可能となり、ユーザーは認証資格証明を提供する必要なく、匿名ユーザーとしてモバイル・アプリケーションを起動し、保護されていないアプリケーション機能にアクセスできます。このような場合、MAFは権限を持つUIコンポーネントを無効化することによって、ユーザーのアクションを制限します。


詳細は、第21.5.1項「認証を要求するようにアプリケーション機能を設定する方法」および第15.2.4項「ユーザー制約とアクセス制御について」を参照してください。

IDM Mobile SDKは、認証、暗号化、ユーザーとロールの管理、および安全な保管のためのAPIを提供します。SDKでは、Mobile and Socialサーバーによって公開されるBasic認証とREST Webサービスを介した認証がサポートされています。Mobile and Socialサーバーでは、Oracle Access Manager (OAM)サーバーに対するリライイング・パーティ認証(つまり、サードパーティのOpenIdおよびOAuthサービス・プロバイダに対する認証)による厳密認証を使用した(または使用しない)認証、およびディレクトリ・サーバーに対する厳密認証を使用した(または使用しない)認証がサポートされています。

モバイル・アプリケーションでは、デフォルト・ページまたはHTMLで記述されたカスタマイズ済のログイン・ページが使用されます。ログイン・ページ以外での認証では、ナレッジベース認証(KBA)がOAMMサーバー上に構成されている場合、ナレッジベース認証ページを使用できます。KBA画面では、母の旧姓などの追加情報を要求することで、追加のチャレンジがユーザーに表示されます。ログイン・ページと同様、KBA画面はカスタマイズできます。

21.1.1 制約に基づくアクセス制御について

user.rolesまたはuser.privileges制約を使用して定義されたアプリケーション機能には、特定のロールおよび権限が付与されたユーザーのみがアクセスできます。ユーザーがそのようなアプリケーション機能にログインする場合、アクセス制御サービス(ACS)と呼ばれるWebサービスが、このアプリケーション機能へのアクセスをユーザーに許可するユーザー・オブジェクトを戻します。ACSの詳細は、第21.4.17項「アクセス制御サービスに関する必知事項」を参照してください。

21.2 ユーザー・ログイン・プロセスについて

エンド・ユーザーの視点からは、ログイン・プロセスは次のようなものになります。

  1. ユーザーが保護されたアプリケーション機能にアクセスしようとすると、常に、図21-1に示すログイン・ページのWebビューがMAFによって表示されます。保護されたアプリケーション機能がデフォルトである場合は、ユーザーがモバイル・アプリケーションを起動すると、MAFによってログイン・ページが表示されます。

    図21-1 ログイン・ページ

    この図は周囲のテキストで説明しています

    注意:

    第21.5.3.2項「カスタム・ログイン・ページ」で説明されているとおり、MAFでは、デフォルト・ログイン・ページを表示するだけでなく、カスタム・ログイン・ページおよびオプションのカスタム・ナレッジベース認証(KBA)画面の使用もサポートされています。


  2. ユーザーがユーザー名とパスワードを入力し、「OK」をクリックします。


    注意:

    MAFでは、複数のユーザーが同じアプリケーションを使用できます。ユーザーは、前のユーザーのログアウト後、自由にアプリケーションにログインできます。


  3. ユーザー名とパスワードが検証されると、MAFによって、目的のWebビュー、ページまたはユーザー・インタフェース・コンポーネントが表示されます。

  4. MAFは、ユーザーが正常にログインするまで、ユーザー名とパスワードの入力を求めます。ユーザーがログインできない場合、別のアプリケーション機能に移動することのみが可能です。

  5. ユーザー名とパスワードの認証後、追加の質問による資格証明をチャレンジするナレッジベース認証(KBA)画面がユーザーに表示される場合があります。KBAが構成されている場合、ログイン・プロセスを完了するには、ユーザーが質問に正しく答える必要があります。KBAはオプションの構成で、OAMMサーバー上での適切な構成が必要となります。


注意:

アプリケーション機能が最後にアクティブ化されて以降、事前定義された時間が経過すると、認証はタイムアウトになります。MAFでは、認証サーバーへの接続を使用するアプリケーション機能のいずれかがアクティブ化されたときのみ、アイドル・タイムアウトのタイマーの期限が更新されます。


21.3 モバイル・アプリケーションの認証プロセスの概要

モバイル・アプリケーションでは、リモート・ログイン・サーバー(Oracle ADF Fusion Webアプリケーションによって使用されるOracle Access Managerアイデンティティ・サーバーなど)、またはユーザーのデバイス上に存在するローカル資格証明ストアに対するユーザー資格証明の検証が必要になる場合があります。ローカルおよびリモート接続モードをサポートするため、MAFでは次の認証プロトコルがサポートされています。

デフォルトでは、モバイル・アプリケーション・ユーザーの認証は、デザインタイムに選択された認証プロトコルに関係なく、リモート・ログイン・サーバーに対して行われます。開発者は、Oracle Access Management Mobile and Social (OAMMS)およびBasic認証の場合に、ローカル認証を有効化するようアプリケーションを構成できます。ただし、最初は、ローカル資格証明ストアに資格証明が移入されていないため、ログインして保護されたアプリケーション機能にアクセスする場合、リモート・ログイン・サーバーに対する認証が必要となります。リモート認証に成功すると、以降は(デバイス上の認証サーバーからのユーザーのログイン資格証明が格納されている)ローカル資格証明ストアを使用できるようになります。このように、ユーザーが同じアプリケーション・セッション内(つまり、アプリケーション実行のライフサイクル内)でサーバーに対して認証されると、MAFはこの認証コンテキストをローカルに格納し、以降の認証試行に使用できるようにします。この場合、ローカルの認証コンテキストで問題なくユーザーを認証できるときには、MAFはサーバーに接続しません。最初の認証では認証サーバーへの接続が必要ですが、ローカル認証を使用するアプリケーションの場合はそのサーバーに頻繁にアクセスする必要はありません。


ヒント:

ローカル資格証明ストアに対する認証は、リモート・ログイン・サーバーに対する認証よりも高速で実行できますが、リモート接続のみをサポートするOAuthやWeb SSO認証プロトコルを使用した認証をお薦めします。


表21-1に、MAFアプリケーションのログイン構成オプションをまとめます。接続モードは、選択した認証プロトコルによって異なります。

表21-1 MAFの接続モードおよびサポートされている認証プロトコル

接続モード サポートされているプロトコル モードの説明

ローカル

  • HTTP Basic

  • Mobile-Social

ローカルに格納されている資格証明がデバイスで使用不可能な場合にのみ、アプリケーションでリモート・ログイン・サーバーに対する認証を行う必要があります。最初のログインは、常にリモート・ログイン・サーバーに対して行われます。最初のログインが成功すると、MAFは、資格証明をデバイスの資格証明ストア内にローカルに保持します。アプリケーション機能への以降のアクセスでは、それらの資格証明が使用されます。第21.4.15項「Webサービス・セキュリティに関する必知事項」も参照してください。

リモート

  • HTTP Basic

  • Mobile-Social

  • OAuth

  • Web SSO

アプリケーションで、Oracle Access Manager (OAM)アイデンティティ・サーバーなどのリモート・ログイン・サーバーまたは保護されているWebアプリケーションに対する認証が必要です。ユーザーがログインするたびに、リモート・サーバーに対する認証が求められます。デバイスがサーバーに接続できない場合、ユーザーは、前回は正常に認証されていても、アプリケーションにログインすることはできません。

ハイブリッド

  • HTTP Basic

  • Mobile-Social

ネットワーク接続が使用可能である場合は、デバイス上のローカル資格証明がで使用可能でも、アプリケーションでリモート・ログイン・サーバーに対する認証を行う必要があります。ネットワーク接続が切断されてログイン・サーバーにアクセスできない場合にのみ、デバイス上のローカル資格証明が使用されます。


モバイル・アプリケーションが認証サーバーに対してユーザー資格証明を検証するときには、次のセキュリティのフローに従います。

  1. MAFは、(図21-1のような)ログイン・ページ、またはナレッジベース認証画面をユーザーに表示します。

  2. Oracle Access Management Mobile and Social (OAMMS)クライアントSDKのAPIは、認証サーバーと、デバイス上の資格証明ストア(保存済のユーザー・オブジェクトが格納されている場合があります)の両方に対する資格証明認証を処理します。認証に成功すると、APIは有効なユーザー・オブジェクトをMAFに戻します。それ以外の場合は、失敗を戻します。


    注意:

    OAMMSにログインすると、ロールおよび権限コレクションがuserオブジェクトに移入されます。


  3. ログインに成功すると、MAFは、Cookieで使用されるOAMトークンを受け取ります。各ログイン接続にCookieが設定されます。

  4. OAMMSクライアントSDK APIは資格証明をデバイスの資格証明ストアに保存します。

  5. ログインに失敗した場合、ログイン・ページまたはKBA画面が表示されたままになり、ユーザーは先に進むことができません。

21.4 MAF接続の構成

セキュリティが適用されるアプリケーション機能用に、アプリケーション・ログイン・サーバーへの接続を少なくとも1つ定義する必要があります。アプリケーション・ログイン・サーバーへの定義済の接続が存在しないと、無効な構成になります。その結果、アプリケーションは正しく機能しません。

21.4.1 MAFログイン接続の作成方法

図21-2に示すように、MAF接続の作成ダイアログを使用して接続タイプを選択し、接続タイプに応じて、ローカルおよびリモート認証の両方を有効化します(ハイブリッド)。アプリケーション要件に応じて、次の認証プロトコルをサポートするサーバーへの接続を構成できます。

  • HTTP Basic

  • Mobile-Social

  • OAuth

  • Web SSO


注意:

OAuthまたはWeb SSO接続タイプを使用したログイン・サーバーへの接続を構成することをお薦めします。OAuthおよびWeb SSOでは、リモート・ログイン・サーバーに対する認証が必要となり、デバイス上でのローカル資格証明ストアからの認証をユーザーに許可しません。


図21-2 認証の構成

この図は周囲のテキストで説明しています

ログイン・サーバー接続を作成するには:

  1. 次のアクションのいずれかを実行します。

    • ナビゲータで、「ディスクリプタ」ノード、「ADF META-INF」と開き、maf-application.xmlをダブルクリックします。次に、maf-application.xmlファイルの概要エディタで、図21-3に示すように、「認証とアクセス制御」セクションを開き、「追加」をクリックします。

      図21-3 サーバー接続の追加

      この図は周囲のテキストで説明しています

      注意:

      maf-application.xmlファイルの概要エディタでは、アプリケーション・ログイン・サーバー接続を定義し、それをデフォルトのアプリケーション機能に割り当てることができます(デフォルトのアプリケーション機能が保護されている場合)。この場合、アプリケーション・ログイン・サーバーで指定される資格証明は、アクセス制御サービス(ACS)を介してユーザー、ロールおよびサービスを検索するためにも使用されます。第21.4.17項「アクセス制御サービスに関する必知事項」も参照してください。


    • または、「新規ギャラリ」で「接続」を選択し、「MAFログイン・サーバー接続」を選択します。

  2. 「MAFログイン接続の作成」ダイアログで、目的の「認証サーバー・タイプ」を選択します。

  3. 次の項の説明に従って接続タイプを構成します。

    ダイアログに表示される、アスタリスクが付いたオプションは必須フィールドであることに注意してください。このダイアログでは、すべての必須フィールドが入力された後にのみ「接続のテスト」ボタンが有効になります。このボタンは、Basic認証がダイアログで選択されている場合にのみ表示されます。

21.4.2 Basic認証の構成方法

図21-4に示すように、「MAFログイン接続の作成」ダイアログで「HTTP基本」認証サーバー・タイプを選択して、Basic認証の接続を構成できます。

図21-4 Basic認証の構成

この図は周囲のテキストで説明しています

Basic認証を構成するには:

  1. 「MAFログイン接続の作成」ダイアログの「認証サーバー・タイプ」「HTTP基本」を選択します。

    「MAFログイン接続の作成」ダイアログを開く方法の詳細は、第21.4.1項「MAFログイン接続の構成方法」を参照してください。

  2. 「一般」タブで、次を定義します。

    • 接続モード: 表21-1に示すように、認証のタイプを選択します。

    • 接続名: 接続の名前を入力します。

    • アイドル・タイムアウト: MAFがアプリケーション機能のアクティブ化を検出しなくなって以降、アプリケーション機能をアイドル状態にしておく時間を入力します。この時間が経過すると、このログイン接続によって保護されているすべてのアプリケーション機能がタイムアウトになります。この状況では、ユーザーが再度その機能にアクセスすると、MAFによってログイン・ページが表示されます。デフォルトでは、アプリケーションが300秒(5分)アイドルのままである場合、ログイン・ページが表示されます。


      注意:

      MAFは、アイドル・タイムアウト後、ローカル資格証明ストアに対して認証を実行しますが、セッション・タイムアウト後にこの認証を実行することはありません。


    • セッション・タイムアウト: ユーザーがアプリケーション機能にログインした状態のままでいられる時間を秒単位で指定します。セッションが期限切れになった後、アイドル・タイムアウト期間が経過していない場合、MAFは、ユーザーにログイン・ページを表示します。デフォルトでは、ユーザー・セッションは28,800秒(8時間)継続します。

    • ログイン最大試行回数: ローカル資格証明がクリアされるまでにユーザーに許可する最大ログイン試行失敗回数を設定します。デフォルトで、MAFは、ユーザーに3回のログイン試行の失敗を許可しており、それを超えると、ローカルに格納されているそのユーザーの資格証明をクリアし、以降のログイン試行では、リモート・ログイン・サーバーに接続します。リモート・サーバーに接続した後は、そのユーザーに許可されるログイン試行回数は無制限になります。

      ユーザーがログイン試行を指定した回数失敗すると、ローカル資格証明がクリアされるため、MAFはサーバーに対して認証を実行します。これにより、ユーザーは、管理者がユーザーのパスワードを変更した後、パスワードがデバイス上にまだ格納されていない状態で、この新しいパスワードを使用してログインできるようになります。ローカル認証が許可されている場合、ユーザーがサーバー接続へのログインに成功するとパスワードはデバイス上に安全に格納されます。


      注意:

      アプリケーション機能がローカル認証を使用するように構成されている場合でも、MAFは、ローカルに格納されているユーザー資格証明をクリアします。


    • RESTコールにログイン・サーバーのCookieを含める: リモート認証を使用するアプリケーション機能の場合、ログイン・サーバーが生成したユーザー・セッションCookieを使用してログイン・サーバーに格納されている認可済のユーザーのデータを取得するために、このオプションを選択してREST Webサービスを有効にします。詳細は、第21.4.12項「REST Webサービス・コールへのCookieの追加に関する必知事項」を参照してください。


      注意:

      REST Webサービス・コールへのCookieの挿入を可能にするには、アプリケーション機能でリモート認証を使用する必要があり(MAFでは、ユーザー資格証明をローカルに格納するアプリケーション機能の場合はCookieの挿入がサポートされていません)、「ログインURL」に入力されたドメインはREST Webサービス・エンドポイントのドメインと同じである必要があります。


    • HTTPリクエストに基本認証ヘッダーを含めます: Webビューから発行されたHTTPリクエスト内に基本認証ヘッダーをMAFが追加できるようにする場合、このオプションを選択します。Basic認証は、MAFで使用されるデフォルトのリクエスト・メソッドです。基本認証ヘッダーは、ログイン接続タイプがHTTP基本である場合にのみ挿入されます。第21.4.14項「基本認証ヘッダーの挿入に関する必知事項」も参照してください。

  3. 図21-5に示すように、「HTTP基本」タブをクリックして、次を構成します。

    • マルチテナント対応: MAFでは、1つのモバイル・アプリケーションに異なる組織(テナント)で共有可能な1つのホスト・アプリケーション機能が含まれ、それが特定のテナントによって所有されているように見える、マルチテナントの概念がサポートされています。このオプションを選択して、モバイル・アプリケーション接続にマルチテナント対応を定義できます。第21.4.19項「マルチテナント接続の定義時に行われる処理」も参照してください。

    • ログインURL: 認証サーバーのログインURLを入力します。

    • ログアウトURL: 認証サーバーのログアウトURLを入力します。

    図21-5 Basic認証の構成

    このイメージについては周囲のテキストで説明しています。
  4. 「自動ログイン」タブをクリックし、第21.4.8項「ログイン資格証明の格納方法」の説明に従って、パラメータを構成します。

  5. 「認可」タブをクリックし、第21.4.16項「アクセス制御の構成方法」の説明に従って、パラメータを構成します。

  6. 「一般」タブをクリックし、「接続のテスト」をクリックします。

  7. 「OK」をクリックします。

21.4.3 Oracle Mobile and Social Identity Managementを使用して認証を構成する方法

図21-6に示すように、「MAFログイン接続の作成」ダイアログで「Mobile-Social」認証サーバー・タイプを選択して、Oracle Access Manager (OAM)サーバーで認証を行うようにモバイル・アプリケーションの接続を構成できます。この接続タイプのOAMバックエンドでは、Oracle Mobile and Socialサーバーおよび10g WebGate (リソースに対するHTTPリクエストを捕捉して、認証と認可のためにOAMサーバーに転送するWebサーバー・プラグイン)を実行している必要があります。

図21-6 Mobile-Socialでの認証の構成

このイメージについては周囲のテキストで説明しています。

始める前に

OAMバックエンドがOracle Mobile and Socialサーバーおよび10g Webgateを実行していることを確認します。

OM_PROP_OAMMS_URLプロパティ・キーを使用するようにサーバーを構成します。このURL (プロトコル、ホスト名およびポート番号を含む)は、Mobile and Socialサーバーにアクセスするために必要です。HTTPおよびHTTPSプロトコルのみがサポートされています。OAM_ID CookieをWebサーバー・リクエスト・ヘッダーに挿入するようにサーバーを構成する必要もあります。


注意:

この接続タイプでは、KBA (ナレッジベース認証)が必要です。詳細は、第21.5.2項「ログイン・ページの指定方法」を参照してください。


Oracle Mobile and Socialサーバーを介したOracle Access Managementでの認証を構成するには:

  1. 「MAFログイン接続の作成」ダイアログの「認証サーバー・タイプ」「Mobile-Social」を選択します。

    「MAFログイン接続の作成」ダイアログを開く方法の詳細は、第21.4.1項「MAFログイン接続の構成方法」を参照してください。

  2. 「一般」タブで、次を定義します。

    • 接続モード: 表21-1に示すように、認証のタイプを選択します。

    • 接続名: 接続の名前を入力します。

    • アイドル・タイムアウト: MAFがアプリケーション機能のアクティブ化を検出しなくなって以降、アプリケーション機能をアイドル状態にしておく時間を入力します。この時間が経過すると、このログイン接続によって保護されているすべてのアプリケーション機能がタイムアウトになります。この状況では、ユーザーが再度その機能にアクセスすると、MAFによってログイン・ページが表示されます。デフォルトでは、アプリケーションが300秒(5分)アイドルのままである場合、ログイン・ページが表示されます。


      注意:

      MAFは、アイドル・タイムアウト後、ローカル資格証明ストアに対して認証を実行しますが、セッション・タイムアウト後にこの認証を実行することはありません。


    • セッション・タイムアウト: ユーザーがアプリケーション機能にログインした状態のままでいられる時間を秒単位で指定します。セッションが期限切れになった後、アイドル・タイムアウト期間が経過していない場合、MAFは、ユーザーにログイン・ページを表示します。デフォルトでは、ユーザー・セッションは28,800秒(8時間)継続します。

    • ログイン最大試行回数: ローカル資格証明がクリアされるまでにユーザーに許可する最大ログイン試行失敗回数を設定します。デフォルトで、MAFは、ユーザーに3回のログイン試行の失敗を許可しており、それを超えると、ローカルに格納されているそのユーザーの資格証明をクリアし、以降のログイン試行では、リモート・ログイン・サーバーに接続します。リモート・サーバーに接続した後は、そのユーザーに許可されるログイン試行回数は無制限になります。

      ユーザーがログイン試行を指定した回数失敗すると、ローカル資格証明がクリアされるため、MAFはサーバーに対して認証を実行します。これにより、ユーザーは、管理者がユーザーのパスワードを変更した後、パスワードがデバイス上にまだ格納されていない状態で、この新しいパスワードを使用してログインできるようになります。ローカル認証が許可されている場合、ユーザーがサーバー接続へのログインに成功するとパスワードはデバイス上に安全に格納されます。


      注意:

      アプリケーション機能がローカル認証を使用するように構成されている場合でも、MAFは、ローカルに格納されているユーザー資格証明をクリアします。


    • RESTコールにログイン・サーバーのCookieを含める: リモート認証を使用するアプリケーション機能の場合、ログイン・サーバーが生成したユーザー・セッションCookieを使用してログイン・サーバーに格納されている認可済のユーザーのデータを取得するために、このオプションを選択してREST Webサービスを有効にします。詳細は、第21.4.12項「REST Webサービス・コールへのCookieの追加に関する必知事項」を参照してください。


      注意:

      REST Webサービス・コールへのCookieの挿入を可能にするには、アプリケーション機能でリモート認証を使用する必要があり(MAFでは、ユーザー資格証明をローカルに格納するアプリケーション機能の場合はCookieの挿入がサポートされていません)、「ログインURL」に入力されたドメインはREST Webサービス・エンドポイントのドメインと同じである必要があります。


  3. 「Mobile-Social」タブをクリックし、Oracle Access Management Mobile and SocialサーバーへのURLを入力し、モバイル・アプリケーション・サービス・ドメインを入力します。

    また、図21-7に示すように、デバイスでの位置の更新をサーバーで有効化するように接続を構成することもできます。

    図21-7 OAM認証の構成

    このイメージについては周囲のテキストで説明しています。
  4. 「自動ログイン」タブをクリックし、第21.4.8項「ログイン資格証明の格納方法」の説明に従って、パラメータを構成します。

  5. 「認可」タブをクリックし、第21.4.16項「アクセス制御の構成方法」の説明に従って、パラメータを構成します。

21.4.4 OAuth認証の構成方法

図21-8に示すように、「MAFログイン接続の作成」ダイアログを使用して、サードパーティ・アプリケーション(クライアント)がリモート・サーバーに格納されている保護されたデータまたはサービスへの制限付きアクセスを取得する方法を構成できます。Oracle Mobile and Socialサーバーが提供するリライイング・パーティ認証では、アプリケーションがサードパーティOAuthプロバイダに対する認証を実行できます。Oracle Web Services Manager (OWSM) Lite MobileのADFアプリケーション・エージェントは、Webサービス・コールのセキュリティ・ヘッダーにCookieを挿入します。

図21-8 OAuthの構成

このイメージについては周囲のテキストで説明しています。

始める前に

OM_PROP_OAUTH_OAUTH20_SERVERプロパティ・キーを使用するようにサーバーを構成します。

OAuthサーバーでの認証を構成するには:

  1. 「MAFログイン接続の作成」ダイアログの「認証サーバー・タイプ」「OAuth」を選択します。

    「MAFログイン接続の作成」ダイアログを開く方法の詳細は、第21.4.1項「MAFログイン接続の構成方法」を参照してください。

  2. 「一般」タブで、次を構成します。

    • 接続名: 接続の名前を入力します。

  3. 「OAuth」タブをクリックし、図21-9に示すように、次を構成します。

    • 「権限タイプ」を選択し、アプリケーションがログイン・ページを取得する場所を決定します。サーバー・ログイン・ページを表示する場合は、「認可コード」を選択します。MAFアプリケーションでデフォルト・ログイン・ページまたはカスタム・ログイン・ページ(構成されている場合)を表示する場合は、「リソース所有者の資格証明」を選択します。

    • 「クライアント識別子」を入力し、オプションで、「クライアント・シークレット」フィールドに接続パスワード値を入力します。

    • 認可サーバーの「リダイレクト・エンドポイント」およびそのエンドポイントのURIを認可サーバー・エンドポイント自体および「トークン・エンドポイント」に入力します。

    • アプリケーション内の組込みブラウザにログイン・ページを表示する場合は、「埋込みブラウザ・モードの有効化」を選択します。外部ブラウザにログイン・ページを表示する場合は選択を解除します。シングル・サインオン(SSO)が必要となる場合は、このオプションを選択解除して、アプリケーションによって外部ブラウザが使用されるようにします。

    図21-9 クライアントIDおよびエンドポイントの構成

    このイメージについては周囲のテキストで説明しています。
  4. 「認可」タブをクリックし、第21.4.16項「アクセス制御の構成方法」の説明に従って、パラメータを構成します。

21.4.5 Web SSO認証の構成方法

図21-10に示すように、「MAFログイン接続の作成」ダイアログを使用して、クロスドメイン・シングル・サインオンを構成できます。

図21-10 フェデレーテッドSSO認証の構成

このイメージについては周囲のテキストで説明しています。

Web SSOサーバーでの認証を構成するには:

  1. 「MAFログイン接続の作成」ダイアログの「認証サーバー・タイプ」「Web SSO」を選択します。

    「MAFログイン接続の作成」ダイアログを開く方法の詳細は、第21.4.1項「MAFログイン接続の構成方法」を参照してください。

  2. 「一般」タブで、次を構成します。

    • 接続名: 接続の名前を入力します。

    • セッション・タイムアウト: ユーザーがアプリケーション機能にログインした状態のままでいられる時間を秒単位で指定します。セッションが期限切れになった後、アイドル・タイムアウト期間が経過していない場合、MAFは、ユーザーにログイン・ページを表示します。デフォルトでは、ユーザー・セッションは28,800秒(8時間)継続します。

  3. 「Web SSO」タブをクリックし、図21-11に示すように、成功したログインおよび失敗したログインを有効化するURLを構成します。

    図21-11 認証URLの構成

    このイメージについては周囲のテキストで説明しています。
  4. 「認可」タブをクリックし、第21.4.16項「アクセス制御の構成方法」の説明に従って、パラメータを構成します。

21.4.6 MAFアプリケーション・ログイン用プレースホルダ接続の構成方法

図21-12に示すように、「MAFログイン接続の作成」ダイアログを使用して、開発時に名前付き接続を作成し、実行時にログイン属性を移入してこの接続の定義を完成させることができます。この接続タイプは、デザインタイムに接続属性の一部がわからない場合に特に便利です。

アプリケーション開発者は、AdfmfJavaUtilities.updateSecurityConfigWithURLParameters APIを使用して、第21.4.7項「実行時に名前付き接続の接続属性を更新する方法」の説明に従って、デザインタイムに作成されたプレースホルダ接続を完全に定義する必要があります。

図21-12 プレースホルダ接続の構成

このイメージについては周囲のテキストで説明しています。

実行時に定義するためのプレースホルダ接続を構成するには:

  1. 「MAFログイン接続の作成」ダイアログの「認証サーバー・タイプ」「実行時に値を指定」を選択します。

    「MAFログイン接続の作成」ダイアログを開く方法の詳細は、第21.4.1項「MAFログイン接続の構成方法」を参照してください。

  2. 「一般」タブで、次を構成します。

    • 接続名: 接続の名前を入力します。アプリケーション開発者はこの識別子を使用して、第21.4.7項「実行時に名前付き接続の接続属性を更新する方法」の説明に従って、更新する接続を識別します。

    • RESTコールにログイン・サーバーのCookieを含める: リモート認証を使用するアプリケーション機能の場合、ログイン・サーバーが生成したユーザー・セッションCookieを使用してログイン・サーバーに格納されている認可済のユーザーのデータを取得するために、このオプションを選択してREST Webサービスを有効にします。詳細は、第21.4.12項「REST Webサービス・コールへのCookieの追加に関する必知事項」を参照してください。


      注意:

      REST Webサービス・コールへのCookieの挿入を可能にするには、アプリケーション機能でリモート認証を使用する必要があり(MAFでは、ユーザー資格証明をローカルに格納するアプリケーション機能の場合はCookieの挿入がサポートされていません)、「ログインURL」に入力されたドメインはREST Webサービス・エンドポイントのドメインと同じである必要があります。


    • HTTPリクエストに基本認証ヘッダーを含めます: 接続タイプがBasic認証を使用して、Webビューから発行されたHTTPリクエスト内に基本認証ヘッダーをMAFが追加できるようにする場合、このオプションを選択します。Basic認証は、MAFで使用されるデフォルトのリクエスト・メソッドです。基本認証ヘッダーは、ログイン接続タイプがHTTP基本である場合にのみ挿入されます。第21.4.14項「基本認証ヘッダーの挿入に関する必知事項」も参照してください。

  3. 「認可」タブをクリックし、第21.4.16項「アクセス制御の構成方法」の説明に従って、パラメータを構成します。

21.4.7 実行時に名前付き接続の接続属性を更新する方法

アプリケーション開発者は、AdfmfJavaUtilities.updateSecurityConfigWithURLParameters APIを使用して、プレースホルダ(図21-12に示すように「MAFログイン接続の作成」ダイアログで「実行時に値を指定」を選択した場合)、または完全に設定された接続定義のいずれかによって、すでに存在する接続の接続属性を定義または再定義できます。


注意:

通常のタイミングでは、アプリケーション・ライフサイクル・リスナー内のstart()メソッド実装でAdfmfJavaUtilities.updateSecurityConfigWithURLParameters APIをコールします。このメソッドを機能ライフサイクル・リスナー内からコールしないでください。


configUrlParamパラメータに関連付けられた接続属性を更新するには、updatedSecurityConfigWithURLParametersメソッドを次のようにコールします。

import oracle.adfmf.framework.api.AdfmfJavaUtilities;
...
   AdfmfJavaUtilities.updateSecurityConfigWithURLParameters(configUrlParam,
              key, message, showConfirmation);

keyパラメータは、connections.xmlファイル内のadfCredentialStoreKeyパラメータに対して定義されている値からStringオブジェクトとして設定されます。このメソッドをshowConfirmationパラメータをtrueに設定して呼び出すと、MAFが既存の接続の属性に対する接続構成の変更を検出した場合にエンド・ユーザーに確認のプロンプトを表示できるようになります。

AdfmfJavaUtiltiesクラスおよびconfigUrlParamパラメータの使用の詳細は、Oracle Fusion Middleware Oracle Mobile Application Framework Java APIリファレンスを参照してください。

21.4.8 ログイン資格証明の格納方法

セキュリティが重要でない場合、MAFではユーザー資格証明を格納することがサポートされており、これを(ログイン接続で定義したモードに応じて)ログイン・サーバーに対してリプレイしたり、ユーザーのローカル認証に使用することができます。資格証明を格納すると、ユーザーはログインしないでモバイル・アプリケーションにアクセスできるようになるため、ユーザーの操作性が向上します。IDM Mobile SDKにより、MAFは次のモードをサポートできるようになります。

  • 自動ログイン: MAFは、ユーザー資格証明をキャッシュし、これらを以降の認証で認証サーバーに対してリプレイします。このモードでは、ユーザーは、MAFによって資格証明の入力や確認を求められることなくアプリケーションを起動できます。ただし、MAFは新しいアプリケーション・セッションが開始されたことをユーザーに知らせることができます。

  • 資格証明を記憶: MAFはユーザー資格証明をキャッシュし、ログイン・ページのユーザー名フィールドとパスワード・フィールドに移入します。ユーザーがログイン・ボタンをタップしてこれらの資格証明を確認すると、MAFはそれらを認証サーバーに対してリプレイします。

  • ユーザー名を記憶: MAFはユーザー名をキャッシュし、ログイン・ページのユーザー名フィールドに移入します。ユーザーがパスワードを入力し、ログイン・ボタンをタップして確認すると、MAFはこれらの資格証明を認証サーバーに対してリプレイします。


注意:

ユーザーは、これらの資格証明をMAFが格納するかどうかを決定できます。


図21-13に示すように、「MAFログイン接続の作成」ダイアログの「自動ログイン」ページを使用して、資格証明格納オプションを選択できます。資格証明オプションを選択すると、ユーザー名とパスワードを記憶するオプションによってログイン・ページが設定されるため、デバイスを複数のエンド・ユーザーが共有する場合は選択しないでください。

図21-13 ユーザー資格証明のキャッシュ

この図は周囲のテキストで説明しています

21.4.9 ローカルおよびハイブリッド・ログイン接続の場合の複数のアイデンティティに関する必知事項

リモート接続と同様、ローカルおよびハイブリッド・ログイン接続モードでは、ユーザーは、アプリケーション・ライフサイクル内で、任意の数のアイデンティティを使用してログインおよびログアウトできます。これらの接続モードを使用するようにログイン接続を定義すると、現在のセッションのタイムアウト期間内に、保護されているアプリケーション機能に前にログインしたユーザーは、ローカル資格証明ストアを使用して、保護されているアプリケーション機能に再びログインできます。この場合、明示的にログアウトしたユーザー、またはアイドル・タイムアウトが経過したためにログアウトしたユーザーは、保護されているアプリケーション機能(またはそのアプリケーション機能を保護しているログイン・サーバーにより保護されている他のアプリケーション機能)に再びログインできます。


注意:

ローカルおよびハイブリッド接続は、Basic認証、およびOracle Access Management Mobile and Social (OAMMS)への認証にのみ使用できます。OAuthおよびフェデレーテッドSSOは、リモート認証を使用するため、アプリケーション・ユーザーは、認証に成功しないかぎり、再びログインすることはできません。


21.4.10 MAFアプリケーションおよび認証モードの移行に関する必知事項

MAFアプリケーションを移行する場合、maf-feature.xmlで定義されている認証モード(<adfmf:feature id="feature1" name="feature1" credentials="remote">など)が、connections.xmlファイルのauthenticationMode属性で定義されていることを確認する必要があります。credentials属性の存在を検出するJDeveloperの監査ルールを使用すると、その属性をmaf-feature.xmlから削除するのに役立ちます。

connections.xmlファイルのauthenticationMode属性は、remoteまたはlocalとしてのみ定義できるため、none (<adfmf:feature id="feature1" name="feature1" credentials="none">)の値を移行しないでください(移行すると、デプロイメントが失敗します)。

21.4.11 REST Webサービス・コールへのCookieの挿入を可能にする場合の処理

図21-15に示されているように、「MAFログイン接続の作成」ダイアログで「RESTコールにログイン・サーバーのCookieを含める」オプションを選択すると、MAFは、ログイン・サーバーによって送信されたこのユーザー・セッションCookieを取得し、それをモバイル・アプリケーションから開始されたREST Webサービス・コールのHTTPヘッダーに挿入します。

モバイル・アプリケーションがREST Webサービスを要求するたびに、MAFのセキュリティ・フレームワークは、REST Webサービスのトランスポート・レイヤーが、REST WebサービスのURLエンドポイントに関連付けられているログイン接続に対してCookieの挿入が可能かどうかをチェックできるようにします。つまり、例21-4に示されているように、connections.xmlファイルに<injectCookiesToRESTHttpHeader value="true"/>が含まれている必要があります。

接続でCookieの挿入が許可されており、ログイン・サーバーとREST Webサービス・エンドポイントのドメインが一致している場合、セキュリティ・フレームワークによって、ユーザーがアプリケーション機能にログインしたときに格納されたCookieが取得されます。MAFは、REST Webサービス・リクエストのドメインに格納されているすべてのCookieを伝播します。MAFは、Rest Webサービス・レスポンス内のSet-CookieヘッダーごとにCookieを格納します。Set-Cookieヘッダーでは、Cookieをストアに追加するか、または名前が同じである場合は既存のCookieを新しいCookieに置き換えます。REST Webサービス・レスポンスによって戻されたCookie、および認証プロセスで戻されたCookieは、以降のREST Webサービス・リクエストに挿入されます。


注意:

MAFは、(プラットフォーム固有のCookieストアから名前でCookieを戻す) Oracle Access Management Mobile and Social (OAMMS) APIをコールすることで、Cookie文字列を作成します。IDM Mobile SDKは、認証サーバーによって戻されたCookieを管理します。それらの名前は、connections.xmlファイルで定義されます。


21.4.12 CookieをREST Webサービス・コールに追加することに関する必知事項

ユーザーがモバイル・アプリケーションによって正常に認証されると、ログイン・サーバーは、そのユーザーのセキュリティ・コンテキストを作成し、ユーザー・セッションを追跡するCookieを生成します。図21-15に示されているように、「MAFログイン接続の作成」ダイアログで「RESTコールにログイン・サーバーのCookieを含める」オプションを選択すると、MAFは、ログイン・サーバーによって送信されたこのユーザー・セッションCookieを取得し、それをモバイル・アプリケーションから開始されたREST Webサービス・コールのHTTPヘッダーに挿入します。

CookieをWebサービス・コールに伝播することで、ログイン・サーバーに格納されているユーザーのセキュリティ・コンテキストを取得し、モバイル・アプリケーションがREST Webサービスを使用して、そのユーザーに対して認可されているアプリケーション・データにアクセスできるようになります。ユーザー・セッションCookieが期限切れになると、MAFは、ユーザーに資格証明を要求し、ユーザーを再認証します。再認証されたユーザーは、引き続き、REST Webサービス・コールを介して認可済のアプリケーション・データにアクセスできます。

21.4.13 実行時に行われる処理: MAFがREST Webサービスをコールした場合

ユーザーがローカルに認証されると、MAFはモバイル・アプリケーションがREST Webサービスをコールしたときにログイン・サーバーに対してユーザーをサイレントに認証します。ユーザーの資格証明が認証されると、MAFはREST Webサービスに対するアプリケーションのリクエストを実行します。REST Webサービスが401ステータス・コード(未許可)を戻した場合、MAFはユーザーに再度の認証を指示します。REST Webサービスが302コード(検出または一時的に移動されました)を戻した場合、MAFはログイン・サーバーをチェックして、ユーザーが認証されているかどうかを確認します。そうである場合、コードは302リダイレクトとして処理されます。

ユーザーがログイン・サーバーに対して認証されていない場合、MAFはユーザーに再度の認証を指示します。場合によっては、ログイン・サーバーが、302ステータス・コードを戻したときに、サーバー独自のWebページを使用した認証をユーザーに指示する場合があります。MAFでは、このような場合のリダイレクションをサポートしておらず、かわりにMAFログイン・ページを使用して再度ログインすることをユーザーに指示します。

21.4.14 基本認証ヘッダーの挿入に関する必知事項

サーバーがCookieを受け付けない場合、Webビューから発行されたHTTPリクエスト内に基本認証ヘッダーを挿入することによって、アプリケーション機能がセキュア・リソースにアクセスすることを可能にします。デフォルトでは、MAFはBasic認証を使用します。「HTTPリクエストに基本認証ヘッダーを含めます」オプションがデフォルトで選択されているため、Webビューから発行されたHTTPリクエスト内に基本認証ヘッダーを挿入することによって、MAFはアプリケーション機能がセキュア・リソースにアクセスすることを可能にします。


注意:

MAFによって基本認証ヘッダーが挿入されないようにするには、<injectBasicAuthHeader>要素のvalue属性をfalseに設定します。


ユーザー名とパスワードの認証レルムを定義すると、connections.xmlファイルに定義した<realm>要素が移入されます。例21-1に示すように、MAFは、connections.xmlファイルにこれらの定義が含まれているかどうかに関係なく、ヘッダーを追加します。

例21-1 connections.xmlファイルを使用した、基本認証ヘッダーの挿入

<?xml version = '1.0' encoding = 'UTF-8'?>
<References xmlns="http://xmlns.oracle.com/adf/jndi">
   <Reference name="connection1" 
              className="oracle.adf.model.connection.adfmf.LoginConnection" 
              adfCredentialStoreKey="connection1" 
              partial="false" manageInOracleEnterpriseManager="true"
              deployable="true" xmlns="">
      <Factory className=
                     "oracle.adf.model.connection.adfmf.LoginConnectionFactory"/>
      <RefAddresses>
         <XmlRefAddr addrType="adfmfLogin">
            <Contents>
               <login url="http://www.us.example.com/userInfo"/>
               <logout url="http://www.us.example.com/userInfo"/>
               <accessControl url="http://10.0.0.0/identity/authorize"/>
               <idleTimeout value="300"/>
               <sessionTimeout value="28800"/>
               <cookieNames/>
               <realm value="Secure Area"/>
               <injectBasicAuthHeader value="true"/>
               <userObjectFilter/>
            </Contents>
         </XmlRefAddr>
      </RefAddresses>
   </Reference>
</References>

21.4.15 Webサービス・セキュリティに関する必知事項

Webサービス用のログイン・ページはなく、かわりに、MAFによってユーザー・アクセスが有効化され、Webサービス・コールのヘッダーに資格証明が挿入されます。Webサービスは、ローカルに格納されている資格証明(ユーザーによる認証サーバーへの最初のログインの成功後、MAFによって保持されている資格証明)を使用してアプリケーション・データにアクセスします。ローカル資格証明ストアの名前は、ログイン・サーバー接続のadfCredentialStoreKey属性によって示されます(例21-4ではadfCredentialStoreKey="Connection_1")。Webサービスがこの資格証明ストアを使用できるようにするには、SOAPまたはREST Webサービス接続のadfCredentialStoreKey属性に対して定義されている名前が、ログイン・サーバーのadfCredentialStoreKey属性に対して定義されている名前と一致する必要があります。


注意:

connections.xmlファイルの概要エディタはないため、「プロパティ」ウィンドウを使用して、<Reference>要素のadfcredentialStoreKey属性をログイン・サーバー接続のadfCredentialStoreKey属性用に構成されている名前で更新できます。または、「ソース」エディタを使用して属性を追加または更新できます。


詳細は、第8.5.3項「資格証明の挿入に関する必知事項」を参照してください。

21.4.16 アクセス制御の構成方法

図21-14に示すように、「MAFログイン接続の作成」ダイアログの「認可」ページを使用して、アクセス制御を構成できます。アプリケーション機能に保護されているコンポーネントが含まれている場合は、このページを使用します。たとえば、送信ボタンが含まれる経費レポート・アプリケーションは、disabledとして定義されたsecurityContextオブジェクトが含まれるEL式を使用して、管理者権限を持つユーザーがこのアプリケーションにログインした場合にのみ送信ボタンが表示されるように構成できます。「認可」ページのフィールドへの入力が完了すると、アクセス制御サービス、つまりRESTful Webサービスが構成され、これにより、アプリケーション機能によってチェックされた特定のユーザー・ロールを取得できるようになります。

図21-14 アクセス制御の構成

この図は周囲のテキストで説明しています

アプリケーション・ログイン・サーバーによって付与されるアクセス制御は、第15.2.4項「ユーザー制約とアクセス制御について」で説明されているとおり、そのアプリケーション機能用に構成されているuser.rolesおよびuser.privileges制約の評価に基づきます。たとえば、manager_roleロールを持つユーザーにのみアプリケーション機能へのアクセスを許可するには、maf-feature.xmlファイル内の<adfmf:constraints>要素を次のように定義する必要があります。

<adfmf:constraint property="user.roles"
                  operator="contains"
                  value="manager_role"/>
</adfmf:constraints>

アプリケーションの起動時、アプリケーション・ログイン・サーバー接続のために、アクセス制御サービス(ACS)として知られているRESTful Webサービスが呼び出され、そのユーザーに割り当てられているロールと権限がフェッチされます。その後、MAFは、アプリケーション・ログイン・サーバー接続に対してログインするようにユーザーに要求します。

MAFは、取得されたユーザー・ロールと権限に照らして各アプリケーション用に構成されている制約を評価し、関連付けられているすべての制約を満たすユーザーのみがアプリケーション機能を使用できるようにします。

アクセス制御を構成するには:

  1. 「MAFログイン接続の作成」ダイアログで、「認可」タブをクリックします。

    「MAFログイン接続の作成」ダイアログを開く方法の詳細は、第21.4.1項「MAFログイン接続の構成方法」を参照してください。

  2. 「認可」ページで、図21-14に示すように、認可要件を入力します。

    • アクセス制御サービスURL: アクセス制御サービス(ACS)のエンドポイントであるURLを入力します。


      注意:

      MAFは、ACSを呼び出すときに、認証サーバー(つまりログイン・サーバー)によって発行されたすべてのCookieをHTTPリクエスト・ヘッダーに挿入します。Cookieの挿入は、「RESTコールにログイン・サーバーのCookieを含める」を選択し、「アクセス制御URL」パラメータと「ログインURL」パラメータに同じドメインを入力した場合に発生します。MAFは、Cookieを挿入する前に、ACS URLとログインURLのドメインが同じであることを確認します。そうでない場合、ログイン・サーバーからのCookieがACSリクエストに挿入されないため、ACSに対する認証は失敗します。セキュアなアクセスのために、ユーザー認証を必須とし、ACS URLを保護することが理想的です。第21.4.12項「CookieをREST Webサービス・コールに追加することに関する必知事項」も参照してください。


    • ユーザー・ロールのフィルタ・リスト: アプリケーション機能によってチェックされるユーザー・ロールを入力します。セキュリティ・システムには、数千もの定義済のユーザー・ロールおよび権限が存在する可能性があるため、アプリケーション機能に固有のロールが記載されているマニフェスト(これは、アプリケーション機能の開発者によって提供されます)を使用して、このリストを作成します。

    • 権限のフィルタ・リスト: アプリケーション機能によってチェックされる権限を入力します。

21.4.17 アクセス制御サービスに関する必知事項

アクセス制御サービス(ACS)は、ユーザーが単一のHTTP POSTメッセージを介して自身のユーザー・ロールと権限をダウンロードできるようにする、JSONを使用したRESTful Webサービスです。これは、特定のユーザーのロールまたは権限(あるいはその両方)を戻すリクエスト・メッセージです。必要なロールと権限のリストを提供することで、特定のロールと権限を戻すこともできます。リクエスト・メッセージは、次のもので構成されています。

  • リクエスト・ヘッダー・フィールド: If-MatchAccept-LanguageUser-AgentAuthorizationContent-TypeContent Length

  • リクエスト・メッセージ本文: ユーザー情報のリクエスト。

  • 次のものが含まれている、リクエストされたJSONオブジェクト:

    • userId: ユーザーID。

    • filterMask: ユーザー・ロールと権限のいずれのフィルタを使用する必要があるのかを判断するために使用される"role"要素と"privilege"要素の組合せ。

    • roleFilter: ユーザー情報をフィルタ処理するために使用されるロールのリスト。

    • privilegeFilter: ユーザー情報をフィルタ処理するために使用される権限のリスト。


注意:

すべてのロールを戻す必要がある場合は、filterMask配列に"role"要素を含めないでください。

すべての権限を戻す必要がある場合は、filterMask配列に"privilege"要素を含めないでください。


例21-2は、HTTP POSTメッセージを示しています。この例では、JSONオブジェクトをペイロードとして識別し、John Smithというユーザーに割り当てられているすべてのフィルタとロールをリクエストします。

例21-2 ユーザー・ロールおよび権限のACSリクエスト

Protocol: POST
Authoization: Basic xxxxxxxxxxxx
Content-Type: application/json
 
{
        "userId": "johnsmith",
        "filterMask": ["role", "privilege"],
        "roleFilter": [ "role1", "role2" ],
        "privilegeFilter": ["priv1", "priv2", "priv3"] 
}

レスポンスは、次のもので構成されています。

  • 次のフィールドを持つレスポンス・ヘッダー: Last-ModifiedContent-TypeおよびContent-Length

  • ユーザー情報の詳細を含むレスポンス・メッセージ本文。

  • 戻されるJSONオブジェクト。これには次のものが含まれます。

    • userId: ユーザーのID。

    • roles: ユーザー・ロールのリスト。これは、リクエスト内のroleFilter配列を定義することでフィルタ処理できます。フィルタ処理しない場合は、そのユーザーに割り当てられているロールのリスト全体が戻されます。

    • privileges: ユーザーの権限のリスト。これは、リクエスト内のprivilegeFilter配列を定義することでフィルタ処理できます。フィルタ処理しない場合は、そのユーザーに割り当てられている権限のリスト全体が戻されます。

例21-3は、戻されたJSONオブジェクトを示しています。これには、ユーザー名およびJohn Smithというユーザーに割り当てられているロールと権限が含まれています。

例21-3 戻されたJSONオブジェクト

Content-Type: application/json
 
{
        "userId": "johnsmith",
        "roles": [ "role1" ],
        "privileges": ["priv1", "priv3"] 
}

注意:

Webサービスでは、ログイン・ページはありませんが、かわりに、MAFによってユーザー・アクセスが有効化され、Webサービスのヘッダーに自動的に資格証明が追加されます。詳細は、第8.5.3項「資格証明の挿入に関する必知事項」を参照してください。



注意:

ACSサービスを実装してホストする必要があります(MAFモバイルでは、このサービスは提供されません)。


21.4.18 アプリケーションのロード順序の変更方法

MAFは、図21-14に示すように、http://10.0.0.0/Identity/AuthorizeなどのACSエンドポイントを定義するログイン接続に対する認証にユーザーが成功した後にアクセス制御サービス(ACS)を呼び出します。この動作を変更して、ログインの成功後すぐにACSが呼び出されないようにすることで、ログインとACSの起動との間にカスタム・プロセスを挿入できます。この追加ロジックは、アプリケーションの詳細に基づく、またはユーザーの職責、組織またはセキュリティ・グループに関連する、MAFによってコールされるセキュリティ・コンテキストです。

connections.xmlファイルを<isAcsCalledAutomatically value = "false"/>で更新し、AdfmfJavaUtilitiesクラスの次のメソッド(MAFアプリケーション機能がACSを必要に応じていつでも呼び出すことができるようにする)を使用して、シーケンスを変更できます。

invokeACS(String key, String OptionalExtraPayLoad, boolean appLogin)

invokeACSメソッドにより、追加のペイロードをACSリクエストに挿入できます。keyパラメータは、例21-1に示されているように、connections.xmlファイル内のadfCredentialStoreKeyパラメータに対して定義されている値からStringオブジェクトとして戻されます。appLoginパラメータをtrueに設定すると、ACSが機能アクセスを再評価できるようになります。OptionalExtraPayLoadパラメータは今後使用するために予約されており、使用されていません。

invokeACSメソッドまたはisAcsCalledAutomaticallyパラメータを使用してACSを呼び出すと、アプリケーションのロールベース制約が取得されます。


注意:

MAFは、<isAcsCalledAutomatically value = "false"/>connections.xmlファイルに含まれていない場合、ログインの成功後、ACSを自動的に呼び出します。


保護されているアプリケーション機能がinvokeACSメソッドをコールすると、MAFは、アプリケーション・ログイン接続に関連付けられたすべてのアプリケーション機能のユーザー制約(保護されているアプリケーション機能に構成されている制約を含む)をフェッチします。保護されていないアプリケーション機能がこのメソッドをコールすると、MAFはログイン接続に関連付けられた制約のみを取得します。


注意:

invokeACSメソッドに加え、AdfmfJavaUtilitiesクラスには次のライフサイクル・メソッドが含まれます。

  • applicationLogout: アプリケーション・ログイン接続をログアウトします。

  • featureLogout(<feature_ID>): アプリケーション機能に関連付けられたログイン接続をログアウトします。

詳細は、Oracle Fusion Middleware Oracle Mobile Application Framework Java APIリファレンスを参照してください。


21.4.19 マルチテナント接続の定義時に行われる処理

「MAFログイン接続の作成」ダイアログへの入力が完了すると、MAFはtrueに設定された<isMultiTenantAware>要素をconnections.xmlファイルに移入します。マルチテナント接続では、ユーザー名はテナント名とユーザー名の組合せです。

ログイン・ページでは、JavaScriptユーティリティを使用して、接続がマルチテナント対応であるかどうかを識別します。ログイン・ページでそのような接続が検出されると、「MAFログイン接続の作成」で構成したテナント名をユーザーが入力する必要がある追加フィールドが表示されます。(正しいテナントIDの入力を含む)ログインに成功すると、MAFはテナントIDをローカル資格認証ストアに格納します。

21.4.20 モバイル・アプリケーションの接続の作成時に行われる処理

MAFでは、connections.xmlファイル内のすべての接続情報が集約されます(このファイルは、「アプリケーション」ウィンドウの「アプリケーション・リソース」パネルの「ディスクリプタ」および「ADF META-INF」ノードの下にあります)。このファイル(例21-4を参照)は、アプリケーションにバンドルすることも、構成サービス用にホスティングすることもできます。後者の場合、MAFは、アプリケーションが起動されるたびに、更新済の構成情報があるかどうかをチェックします。

例21-4 connections.xmlファイル内に定義されているMAF接続

<?xml version = '1.0' encoding = 'UTF-8'?>
<References xmlns="http://xmlns.oracle.com/adf/jndi">
  <Reference name="Connection_1"
             className="oracle.adf.model.connection.adfmf.LoginConnection"
             adfCredentialStoreKey="Connection_1"
             partial="false"
             manageInOracleEnterpriseManager="true"
             deployable="true"
             xmlns="">
      <Factory className="oracle.adf.model.connection.adfmf.LoginConnectionFactory"/>
      <RefAddresses>
         <XmlRefAddr addrType="adfmfLogin">
            <Contents>
               <login url="http://10.0.0.0/SecuredWebServicelogin/login.jsf"/>
               <logout url="http://10.0.0.0/SecuredWebServicelogout/logout.jsf"/>
               <accessControl url="http://10.0.0.0/Identity/Authorize"/>
               <isAcsCalledAutomatically value="false"/>
               <idleTimeout value="300"/>
               <sessionTimeout value="28800"/>
               <isMultiTenantAware value="true"/>
               <multiTenantHeaderName value="Oracle_Multi_Tenant"/>
               <injectCookiesToRESTHttpHeader value="true"/>
               <userObjectFilter>
                  <role name="manager"/>
                  <privilege name="account manager"/>
                  <privilege name="supervisor"/>
                  <privilege name=""/>
               </userObjectFilter>
               <rememberCredentials>
                    <enableRememberUserName value="true"/>
                    <rememberUserNameDefault value="true"/>
                    <enableRememberPassword value="true"/>
                    <rememberPasswordDefault value="true"/>
                    <enableStayLoggedIn value="true"/>
                    <stayLoggedInDefault value="true"/>
               </rememberCredentials>
            </Contents>
         </XmlRefAddr>
      </RefAddresses>
   </Reference>
</References>

詳細は、Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発のconnections.xmlファイルで定義されている参照に関する項を参照してください。

21.5 モバイル・アプリケーションのセキュリティの構成

maf-feature.xmlmaf-application.xmlファイルの概要エディタ、および「MAFログイン接続の作成」ダイアログを使用して、セキュリティを構成します。概要エディタを使用すると、認証を必要とするアプリケーション機能をユーザーが選択したときにMAFによって表示されるログイン・ページのタイプ(デフォルトまたはカスタム)を指定したり、ユーザー・ロールまたはユーザー権限ベースの制約を含めることができます。また、セキュリティが必要な埋込みアプリケーション機能を選択することもできます。

21.5.1 認証を要求するようにアプリケーション機能を設定する方法

セキュリティが適用されるように各アプリケーション機能を定義できます。残りのセキュリティ構成は、maf-application.xmlの概要エディタの「セキュリティ」ページを使用して実行します。アプリケーション機能のコンテンツがリモートURLから提供される場合に、この概要エディタを使用すると、リモートURLのコンテンツをMAFのWebビューに表示できるように、ドメインをホワイトリストできます。詳細は、第13章「リモートURLを使用したアプリケーション機能コンテンツの実装」を参照してください。

図21-15に示されているmaf-feature.xml概要エディタの「一般」タブでは、セキュリティを適用するアプリケーション機能と、それが要求する認証のタイプを指定できます。

図21-15 アプリケーション機能に対するユーザー資格証明オプションの指定

この図は周囲のテキストで説明しています

始める前に

機能のセキュリティを有効にすると、アプリケーションでは、ユーザーを認証するためにネットワークにアクセスする必要があります。ネットワーク・ソケットへのアプリケーション・アクセス権の付与の詳細は、第21.6.1項「デバイス機能へのアクセスの有効化方法」を参照してください。

アプリケーション機能に対するユーザー・アクセスを指定するには:

  1. ナビゲータのユーザー・インタフェース・プロジェクトで、「アプリケーション・ソース」および「META-INF」フォルダ・ノードを開いてから、maf-feature.xmlをダブルクリックします。

  2. maf-feature.xmlファイルの概要エディタで、「機能」表にリストされているアプリケーション機能を選択するか、または「追加」をクリックしてアプリケーション機能を追加します。

  3. ログインが必要なすべてのアプリケーション機能に「セキュリティ有効化」を選択します。


    ヒント:

    このオプションをデフォルト・アプリケーションに適用しない場合、ユーザーは匿名でログインできます(つまり、ログイン資格証明を提示する必要がありません)。ユーザーは、保護されていないデータや機能にアクセスでき、必要に応じてログインできます(認証されたユーザーは保護されたデータと保護されていないデータの両方にアクセスできます)。モバイル・アプリケーション内に保護されていないアプリケーション機能を提供すると、ユーザーは保護されているアプリケーション機能からログアウトするが、モバイル・アプリケーション自体に残って、保護されていないアプリケーション機能とデータの両方に引き続きアクセスできます。


21.5.2 ログイン・ページの指定方法

アプリケーション機能のセキュリティを指定したら、図21-16に示されているmaf-application.xml概要エディタの「セキュリティ」ページを使用して、セキュリティが適用される各アプリケーション機能に対して、ログイン・ページの構成およびログイン・サーバーへの接続の作成と割当てを行います。このページにリストされているすべてのアプリケーション機能は、maf-feature.xmlファイルで、セキュリティが必要なものとして指定されています。通常、アプリケーション機能のグループは、同じログイン・サーバー接続で保護され、ユーザーは、MAFから再度ログインを求められることなく、これらのアプリケーションをどれでも開くことが可能です。ただし、場合によっては、あるアプリケーション機能のセットを保護しているログイン・サーバーと、別のアプリケーション機能のセットを保護しているログイン・サーバーが異なるため、アプリケーション機能で要求される資格証明がそれぞれ異なる可能性があります。このような状況に対応するために、モバイル・アプリケーション用のログイン・サーバーへの接続をいくつも定義できます。maf-application.xmlファイルでは、機能参照に関連付けられている認証サーバー接続は、次のようにloginConnRefId属性を使用して指定されます。

<adfmf:featureReference id="feature1" loginConnRefId="Connection_1"/>
<adfmf:featureReference id="feature2" loginConnRefId="Connection2"/>

モバイル・アプリケーションは、HTTPまたはHTTPS経由のBasic認証をサポートしている標準のログイン・サーバーなら、どのログイン・サーバーに対しても認証を受けることが可能です。MAFはまた、Oracle Identity Managementに対する認証もサポートしています。特定のアプリケーション機能用のカスタム・ログイン・ページを選択することもできます。詳細は、第21.5.3項「ログイン・ページに関する必知事項」を参照してください。


注意:

デフォルトでは、保護されているすべてのアプリケーション機能が同じ接続を共有します。この接続は、図21-16に示されているように、<application login server>と表示されます。「機能参照」の「プロパティ・インスペクタ」では、このデフォルト・オプションが「ログイン・サーバー接続」ドロップダウン・メニューに<default> application login serverと表示されます。「MAFログイン接続の作成」ダイアログを使用して、モバイル・アプリケーション用に定義されている他の接続を選択できます。


図21-16 maf-application.xmlの概要エディタの「セキュリティ」ページ

この図は周囲のテキストで説明しています

始める前に

モバイル・アプリケーションでカスタム・ログイン・ページを使用する場合は、アプリケーション・コントローラ・プロジェクトのpublic_htmlディレクトリ(JDeveloper\mywork\Application\ApplicationController\public_html)にファイルを追加して、図21-17に示されているように「アプリケーション・ナビゲータ」の「Webコンテンツ」ノードからそれを使用できるようにします。第21.5.3.3項「カスタム・ログインHTMLページの作成」および第4.10.2項「外部リソースの選択に関する必知事項」も参照してください。

第15.2.4項「ユーザー制約とアクセス制御について」の説明に従って、ユーザー権限とロール用の制約を追加します。

アクセス制御サービス(ACS)・サーバーをプロビジョニングします。詳細は、第21.4.17項「アクセス制御サービスに関する必知事項」を参照してください。

図21-17 カスタム・ログイン・ページの追加

この図は周囲のテキストで説明しています

ログイン・ページおよびKBAページを指定するには:

  1. ナビゲータで、「アプリケーション・リソース」パネルを開き、「ディスクリプタ」および「ADF META-INF」フォルダ・ノードを開いて、maf-application.xmlをダブルクリックします。

  2. maf-application.xmlファイルの概要エディタで、「セキュリティ」ナビゲーション・タブをクリックします。

  3. 「セキュリティ」ページで、ログイン・ページのタイプを指定します。

    • ユーザー名とパスワードを受け入れるビューの「ログイン・ページ」を選択します。

    • 資格証明に対するチャレンジをユーザーに表示し、ユーザーの答えを受け入れるナレッジベース認証(KBA)ビューの場合は、「KBAページ」を選択します。ナレッジベース認証はOAAMサーバー上に構成でき、別のページで、母の旧姓などの追加の質問に対する入力をユーザーに求めることができます。この機能は、Mobile-Social認証タイプでのみ使用できます。

  4. 次のように、選択したログイン・ページ、およびオプションで選択したKBAページのコンテンツ(またはユーザー・インタフェース)を選択します。

    • デフォルト: 選択されたすべての埋込みアプリケーション機能で使用されるデフォルト・ログイン・ページまたはKBA画面。詳細は、第21.5.3.1項「デフォルト・ログイン・ページ」を参照してください。デフォルト・ログイン・ページおよびデフォルトKBAページは、MAFによって提供されているものです。

    • カスタム: 「参照」をクリックして、アプリケーション・コントローラ・プロジェクト内のファイルのパスの場所を検索します。または、「新規」をクリックして、ログイン・ページまたはKBAページ用のカスタムHTMLページをアプリケーション・コントローラ・プロジェクト内に作成します。詳細は、第21.5.3.2項「カスタム・ログイン・ページ」および第21.5.3.3項「カスタム・ログインHTMLページの作成」を参照してください。


      ヒント:

      「参照」機能を使用してログイン・ページの場所を検索するのではなく、「アプリケーション・ナビゲータ」からログイン・ページをフィールドにドラッグできます。


21.5.3 ログイン・ページに関する必知事項

アプリケーション機能への認証プロセスのエントリ・ポイントは、activateライフサイクル・イベントです(第4.7.2項「モバイル・アプリケーション・イベントのタイミング」を参照)。アプリケーション機能がアクティブ化される(つまり、アプリケーション機能のactivateイベント・ハンドラがコールされる)たびに、アプリケーション機能のログイン・プロセスが実行されます。このプロセスは、ログイン・ページ(デフォルトまたはカスタムのログイン・ページのいずれか)に移動し、そこでユーザー認証が必要かどうかを判断します。ただし、プロセスがログイン・ページに移動する前に、本来意図されていたアプリケーション機能をMAFに登録する必要があります。認証が成功すると、ログイン・ページは、MAFから本来意図されていた宛先を取得し、そこに移動します。

21.5.3.1 デフォルト・ログイン・ページ

MAFによって提供されるデフォルトのログイン・ページ(図21-1「ログイン・ページ」を参照)は、ログイン・ボタンと、ユーザー名とパスワード用の入力テキスト・フィールド、マルチテナント名、およびエラー・メッセージ・セクションから構成されます。これは、HTMLで記述されたクロス・プラットフォーム・ページです。

21.5.3.2 カスタム・ログイン・ページ

maf-application.xmlファイルの概要エディタを使用して、選択したアプリケーション機能用のカスタム・ログイン・ページを追加すると、JDeveloperは、例21-5に示されているように、<adfmf:login>要素を追加し、その子要素<adfmf:LocalHTML>を設定します。すべての<adfmf:LocalHTML>要素と同様に、そのurl属性は、public_htmlディレクトリ内の場所を参照します。ユーザー認証メカニズムとナビゲーション・コントロールは、デフォルトのログイン・ページと同じものになります。

例21-5 ログイン要素

<adfmf:login defaultConnRefId="Connection_1">
    <adfmf:localHTML url="newlogin.html"/>
</adfmf:login>

カスタム・ログイン・ページはHTMLで記述されています。デフォルト・ログイン・ページとナレッジベース(KBA)ページの両方のフィールドに、特別に定義されている<input>および<label>要素が含まれている必要があります。


ヒント:

カスタム・ログイン・ページを作成するためのガイドとしてMAFアプリケーションのデプロイ時に生成されたデフォルトのログイン・ページを使用します。wwwディレクトリ内のログイン・ページにアクセスするには、モバイル・アプリケーションをデプロイした後、deployディレクトリに移動します。iOSデプロイメントの場合、これらのページは、アプリケーション・ワークスペース・ディレクトリ/deploy/deployment profile name/temporary_xcode_project/www/adf.login.htmlおよびアプリケーション・ワークスペース・ディレクトリ/deploy/deployment profile name/temporary_xcode_project/www/adf.kba.htmlにあります。

Androidデプロイメントの場合、これらのページは、アプリケーション・ワークスペース・ディレクトリ/application name/deploy/deployment profile name/deployment profile name.apk/assets/www/adf.login.htmlおよびアプリケーション・ワークスペース・ディレクトリ/application name/deploy/deployment profile name/deployment profile name.apk/assets/www/adf.kba.htmlのAndroidアプリケーション・パッケージ(.apk)ファイル内にあります。


例21-6は、デフォルト・ログイン・ページに必要な<input>および<label>要素を示しています。

例21-6 デフォルト・ログイン・ページの必須要素

<input type="text"
       autocorrect="off"
       autocapitalize="none"
       name="oracle_access_user_id"
       id="oracle_access_user_id" value="">
   </input>
 
<input type="text"
       autocorrect="off"'
       autocapitalize="none"
       name="oracle_access_iddomain_id"
       id="oracle_access_iddomain_id" value="">
   </input>
 
<input type="password"
       name="oracle_access_pwd_id"
       id="oracle_access_pwd_id" value="">
   </input>
 
<input type="checkbox"
       class="message-text"
       name="oracle_access_auto_login_id"
       id="oracle_access_auto_login_id">
   </input>Keep me logged in
 
<input type="checkbox"
       class="message-text" 
       name="oracle_access_remember_username_id"
       id="oracle_access_remember_username_id">
   </input>Remember my username
 
<input type="checkbox"
       class="message-text"
       name="oracle_access_remember_credentials_id"
       id="oracle_access_remember_credentials_id">
   </input>Remember my password
 
<label id="oracle_access_error_id"
       class="error-text">
   </label>
 
<input class="commandButton"
       type="button"
       onclick="oracle_access_sendParams(this.id)"
       value="Login" id="oracle_access_submit_id"/>

例21-7は、KBAログイン・ページの必須要素を示しています。

例21-7 KBAログイン・ページの必須要素

<input type="text"

<label id="oracle_access_kba_ques_id" >Question</label><br>
 
<input class="field-value"
       name="oracle_access_kba_ans_id"
       id="oracle_access_kba_ans_id">
   </input>
 
<label id="oracle_access_error_id"
       class="error-text">
   </label>
 
<label id="message_id"
      class="message-text">
   </label>
 
<input type="button"
       onclick="oracle_access_sendParams(this.id)"
       value="Login"
       id="oracle_access_submit_id"/>

21.5.3.3 カスタム・ログインHTMLページの作成

MAFのデプロイメントによってwwwディレクトリ内に生成されるアーティファクトである、デフォルトのログイン・ページ(adf.login.htmlまたはadf.kba.html)を使用して、カスタム・ログイン・ページを作成できます。

始める前に

wwwディレクトリ内のログイン・ページにアクセスするには、モバイル・アプリケーションをデプロイした後、deployディレクトリに移動します。iOSデプロイメントの場合、ページは次の場所にあります。

application workspace directory/deploy/deployment profile name/temporary_xcode_project/www/adf.login.html

および

application workspace directory/deploy/deployment profile name/temporary_xcode_project/www/adf.kba.html

Androidデプロイメントの場合、ページは、次の場所にあるAndroidアプリケーション・パッケージ(.apk)ファイル内に配置されます。

application workspace directory/application name/deploy/deployment profile name/deployment profiile name.apk/assets/www/adf.login.html

および

application workspace directory/application name/deploy/deployment profile name/deployment profiile name.apk/assets/www/adf.kba.html

カスタム・ログイン・ページを作成するには:

  1. デフォルト・ログイン・ページを、ユーザー・インタフェース・プロジェクトのpublic_htmlディレクトリ内の場所(JDeveloper\mywork\application name\ApplicationController\public_htmlなど)にコピーします。

  2. ログイン・ページの名前を変更します。

  3. ページを更新します。

  4. maf-application.xmlファイルの概要エディタの「セキュリティ」ページで、「カスタム」を選択し、「参照」をクリックしてログイン・ページの場所を検索します。詳細は、第4.5項「Springboardとナビゲーション・バーの動作の構成」を参照してください。

21.5.4 ログイン・ページ要素に関する必知事項

各HTMLログイン・ページに、表21-2にリストされたユーザー・インタフェース要素が含まれている必要があります。

表21-2 ログイン・ページのフィールドおよび関連するID

ページ要素 ID

ユーザー名フィールド

oracle_access_user_id

パスワード・フィールド

oracle_access_pwd_id

ログイン・ボタン

oracle_access_submit_id

取消ボタン

oracle_access_cancel_id

アイデンティティ・ドメイン/テナント名フィールド

oracle_access_iddomain_id

KBA質問フィールド(読取り専用/ラベル)

oracle_access_kba_ques_id

KBA回答フィールド

oracle_access_ans_id

エラー・フィールド

oracle_access_error_id

自動ログイン・チェックボックス

oracle_access_auto_login_id

資格証明を記憶チェックボックス

oracle_access_remember_credentials_id

ユーザー名を記憶チェックボックス

oracle_access_remember_username_id


表21-3には、OnClickイベントで使用される、推奨のJavaScriptコードがリストされています。

表21-3 OnClickイベントで使用されるJavaScript

ボタン JavaScript

ログイン・ボタン

oracle_access_sendParams(this.id)

取消ボタン

oracle_access_sendParams(this.id)

KBA送信ボタン

oracle_access_sendParams(this.id)

KBA取消ボタン

oracle_access_sendParams(this.id)


21.5.5 アプリケーション機能用セキュリティの構成時のJDeveloperでの処理

セキュリティが適用されるようにアプリケーション機能が指定されると、JDeveloperは、図21-16に示されているように、対応する機能参照で「セキュリティが有効な機能」の表を更新します。参照される各アプリケーション機能が、connections.xmlファイル内に定義されている同じログイン・サーバー接続に対して認証を行うと、JDeveloperは、defaultConnRefId属性を使用して定義されている単一の<adfmf:login>要素(<adfmf:login defaultConnRefId="Connection_1">など)でmaf-application.xmlファイルを更新します。

connections.xmlファイル内に定義されている別のログイン・サーバー接続を使用するように構成されているアプリケーション機能の場合は、JDeveloperは、参照される各アプリケーション機能をloginConnReference属性(<adfmf:featureReference id="feature2" loginConnRefId="Connection2"/)で更新します。詳細は、第21.5.1項「認証を要求するようにアプリケーション機能を設定する方法」を参照してください。また、Oracle Fusion Middleware Oracle Mobile Application Frameworkのタグ・リファレンスも参照してください。

21.6 デバイス機能へのアクセスの許可

すべてのApache Cordova対応デバイス機能へのアクセスは、モバイル・アプリケーションの場合デフォルトでは有効になっていません。かわりに、MAFでは、特定の機能へのアクセスを許可することでセキュリティを確保しています。モバイル・アプリケーションのセキュリティとプライバシ要件を評価するときに、アプリケーションどのようなタイプのアクセス権を持っている必要があるかを選択できます。デフォルトでは、次の機能がモバイル・アプリケーションに対して有効になっていません。

デバイス・サービスを許可または制限できるため、デプロイメント・フレームワークによって更新されるプラットフォーム固有の様々な構成ファイルやマニフェスト・ファイルでは、使用中のサービス(厳密には、モバイル・アプリケーションが使用を許可されているデバイス・サービス)のみがリストされます。これらのファイルにより、MAFはこれらのサービスの使用に関する情報を他のアプリケーションと共有できます。たとえば、モバイル・アプリケーションは、ロケーション・ベースのサービスを(モバイル・アプリケーションがこの機能を備えている場合でも)使用していないことをAppStoreまたはGoogle Playに報告できます。

21.6.1 デバイス機能へのアクセスの有効化方法

モバイル・アプリケーションのデバイス・アクセスは、アプリケーション・レベルおよびアプリケーション機能レベルの両方で構成され(アプリケーション・レベルの構成セットが優先される)、アプリケーション機能の構成でそのデバイス要件が示されますが、これらのアプリケーション機能を使用する権限はアプリケーション構成により付与されます。

maf-feature.xmlおよびmaf-application.xmlの概要エディタでは、<adfmf:deviceFeatureAccess>要素を作成することで、デバイス機能を指定および管理できます。両方の構成ファイルはこの要素およびそのデバイス固有の子要素を共有しますが、maf-feature.xmlファイルの要素はrequestAccess属性を使用して定義され、maf-application.xmlファイルの要素はallowAccess属性を使用して定義されます。

アプリケーション機能に必要なデバイス機能を指定するには:

  1. ナビゲータのユーザー・インタフェース・プロジェクトで、「アプリケーション・ソース」および「META-INF」フォルダ・ノードを開いてから、maf-feature.xmlをダブルクリックします。

  2. maf-feature.xmlファイルの概要エディタで、「機能」表にリストされているアプリケーション機能を選択し、「デバイス・アクセス」タブをクリックし、図21-18に示すように、アプリケーションで必要なデバイス機能を有効化します。

    図21-18 デバイス・アクセス要件の指定

    この図は周囲のテキストで説明しています

少なくとも1つのデバイス機能のセキュリティを有効化した場合は、第21.5.1項「認証を要求するようにアプリケーション機能を設定する方法」の説明に従って、ネットワークへのアクセスも有効化する必要があります。この場合、次のように、maf-application.xmlファイルでネットワーク機能に権限を付与できます。

デバイス機能に権限を付与するには:

  1. ナビゲータで、「アプリケーション・リソース」パネルを開き、「ディスクリプタ」および「ADF META-INF」フォルダ・ノードを開いて、maf-application.xmlをダブルクリックします。

  2. maf-application.xmlファイルの概要エディタで、「デバイス・アクセス」ナビゲーション・タブをクリックし、図21-19に示すように、アプリケーションで必要なデバイス機能に権限を付与します。

図21-19 デバイス・アクセスの付与

この図は周囲のテキストで説明しています

21.6.2 デバイス機能の定義時に行われる処理

MAFは、例21-8に示すように、<adfmf:feature>要素に<adfmf:deviceFeatureAccess>を移入します。

例21-8 maf-feature.xmlファイルでのデバイス機能の定義

<adfmf:feature id="feature3" name="feature3">
    <adfmf:content id="feature3.1">
      <adfmf:amx file="feature3/datapage.amx"/>
    </adfmf:content>
    <adfmf:deviceFeatureAccess>
      <adfmf:deviceEmails id="de1" requestAccess="true"/>
    </adfmf:deviceFeatureAccess>
</adfmf:feature>

maf-application.xmlファイルで、例21-9に示すように、MAFは<adfmf:deviceFeatureAccess>要素を設定します。

例21-9 maf-application.xmlファイルでのデバイス機能権限の追加

<adfmf:deviceFeatureAccess>
    <adfmf:deviceCamera id="dc1" access="true"/>
    <adfmf:deviceContacts id="dc2" access="true"/>
    <adfmf:deviceEmails id="de1" access="true"/>
    <adfmf:deviceFiles id="df1" access="true"/>
    <adfmf:deviceLocation id="dl1"/>
    <adfmf:deviceNetwork id="dn1"/>
    <adfmf:devicePhone id="dp1"/>
    <adfmf:deviceSMS id="dsms1" access="true"/>
</adfmf:deviceFeatureAccess>

詳細は、Oracle Fusion Middleware Oracle Mobile Application Frameworkのタグ・リファレンスを参照してください。

21.6.3 デバイス機能権限に関する必知事項

maf-application.xmlファイルで構成されている、関連のデバイス・アクセス権限を持たないDeviceFeaturesデータ・コントロール・メソッドからコンポーネントを作成する場合、図21-20に示すように、MAFはメソッドに関するダイアログを表示して確認を求めます。このダイアログのデフォルト・オプションでは、許可してmaf-application.xmlファイルを更新するか、または「デバイス・アクセス権限の編集」オプションを使用してファイルを開き、手動で更新できます。

図21-20 デバイス・アクセスの付与

この図は周囲のテキストで説明しています

「MAF AMXページ」内で、デバイス関連のmethodActionバインディングは存在するが、適用可能なデバイス・アクセス権限が削除されている(または定義されていない)場合、MAFは次の形式(および図21-21のアラートで示されているように)エラーを発行します。適切なデバイス・アクセスがadfmf:application.xmlファイルで付与されていない場合、メソッドは機能せず、ランタイム・エラーが発生します。

Application is not allowed to access device <deviceFeatureName>. Enable Device <deviceFeatureName> access in maf-application.xml for <bindingId> to work

図21-21 「MAF AMXページ」でのデバイス・アクセス権限の警告

図21-21については周囲のテキストで説明しています。

21.6.4 デプロイ時のデバイス機能に関する必知事項

各デプロイ時に、MAFはiOSのcordova.plistファイルや、Androidのconfig.xmlAndroidManifest.xmlおよびAndroidManifest.template.xmlファイルをモバイル・アプリケーションにより許可されたデバイス機能で更新します。具体的には、MAFデプロイメント・プロセスがデフォルトのCordovaプラグイン情報をこれらのファイルから除外し、maf-application.xmlファイルの<adfmf:deviceFeatureAccess>要素で定義されている子要素をiOSおよびAndroidファイルで定義されている権限にマップします。表21-4に、<adfmf:deviceSMS>要素をプラットフォーム固有ファイルにマッピングする例を示します。MAFは、各デプロイメントでこれらのファイルを再生成します。

表21-4 プラットフォーム固有ファイルへの<adfmf:deviceSMS>のマッピング

cordova.plistファイル内の<key>へのマッピング config.xmlファイル内の<plugin name>へのマッピング AndroidManifest.xmlファイル内の権限へのマッピング
<key>Plugins</key>
<dict>
   <key>AdfmfSMS</key>
   <string>AdfmfSMSAdaptor</string>
</dict>

<plugin name="AdfmfSMS" value="oracle.adfmf.phonegap.AdfmfSMS"/>

<uses-permission android:name="android.permission.RECEIVE_SMS" />


表21-5に示すように、特定のプラグインがAndroidManifest.xmlファイル内の権限を共有します。デプロイメント・プロセスでは、これらの権限が存在しない場合、または即時利用可能なデバイス機能で権限が必要な場合、権限を追加します。

表21-5 共有されている権限

デバイス・アクセス 権限
  • ネットワーク

  • プッシュ通知

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

  • 連絡先

  • プッシュ通知

<uses-permission android:name="android.permission.GET_ACCOUNTS" />

  • カメラ

  • ファイル

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />



注意:

MAFは、指定のデプロイメント・プロファイルの最初のデプロイメント時にAndroidManifest.template.xmlファイルを抽出します。このファイルによって、AndroidManifest.xmlファイルの最初の内容が提供されます。


表21-4に示している<adfmf:deviceSMS>要素のマッピングと同様、MAFはデプロイメント時に次の要素をiOSおよびAndroid構成ファイルにマッピングします。

<adfmf:deviceCamera>

表21-6は、MAFが<adfmf:deviceCamera allowAccess="true" />をプラットフォーム固有ファイルにマッピングする方法を示しています。

表21-6 プラットフォーム固有ファイルへの<adfmf:deviceCamera>のマッピング

cordova.plistファイル内の<key>へのマッピング config.xmlファイル内の<plugin name>へのマッピング AndroidManifest.xmlファイル内の権限へのマッピング
<key>Plugins</key>
<dict>
    <key>Camera</key>
    <string>CDVCamera</string>
    <key>Capture</key>
    <string>CDVCapture</string>
</dict>
<plugin name="Camera" value="org.apache.cordova.CameraLauncher"/>
<plugin name="Capture" value="org.apache.cordova.Capture"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<adfmf:deviceContacts>

表21-7は、MAFが<adfmf:deviceContacts allowAccess="true"/>をプラットフォーム固有ファイルにマッピングする方法を示しています。

表21-7 プラットフォーム固有ファイルへの<adfmf:deviceContacts>のマッピング

cordova.plistファイル内の<key>へのマッピング config.xmlファイル内の<plugin name>へのマッピング AndroidManifest.xmlファイル内の権限へのマッピング
<key>Plugins</key>
<dict>
    <key>Contacts</key>
    <string>CDVContacts</string>
</dict>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>

<adfmf:deviceEmails>

表21-8は、MAFが<adfmf:deviceEmails allowAccess="true"/>をプラットフォーム固有ファイルにマッピングする方法を示しています。

表21-8 プラットフォーム固有ファイルへの<adfmf:deviceEmails>のマッピング

cordova.plistファイル内の<key>へのマッピング config.xmlファイル内の<plugin name>へのマッピング AndroidManifest.xmlファイル内の権限へのマッピング
<key>Plugins</key>
<dict>
    <key>AdfmfEmail</key>
<plugin name="AdfmfEmail" value="oracle.adfmf.phonegap.AdfmfEmail"/>

AndroidManifest.xmlファイルに電子メール・エントリがないため、該当しません。


<adfmf:deviceNetwork>

表21-9は、MAFが<adfmf:deviceNetwork allowAccess="true"/>をプラットフォーム固有ファイルにマッピングする方法を示しています。

表21-9 プラットフォーム固有ファイルへの<adfmf:deviceNetwork>のマッピング

cordova.plistファイル内の<key>へのマッピング config.xmlファイル内の<plugin name>へのマッピング AndroidManifest.xmlファイル内の権限へのマッピング
<key>Plugins</key>
<dict>
  <key>NetworkStatus</key>
  <string>CDVConnection</string>
</dict>
<plugin name="NetworkStatus" value="org.apache.cordova.NetworkManager"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<adfmf:deviceFiles>

表21-10は、MAFが<adfmf:deviceFiles allowAccess="true"/>をプラットフォーム固有ファイルにマッピングする方法を示しています。

表21-10 プラットフォーム固有ファイルへの<adfmf:deviceFiles>のマッピング

cordova.plistファイル内の<key>へのマッピング config.xmlファイル内の<plugin name>へのマッピング AndroidManifest.xmlファイル内の権限へのマッピング
<key>Plugins</key>
<dict>
    <key>File</key>
    <string>CDVFile</string>
</dict>
 
<key>Plugins</key>
<dict>
    <key>FileTransfer</key>
    <string>CDVFileTransfer</string>
</dict>
<plugin name="File" value="org.apache.cordova.FileUtils"/>
<plugin name="FileTransfer" value="org.apache.cordova.FileTransfer"/>
<plugin name="Storage" value="org.apache.cordova.Storage"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<adfmf:deviceLocation>

表21-11は、MAFが<adfmf:deviceLocation allowAccess="true"/>をプラットフォーム固有ファイルにマッピングする方法を示しています。

表21-11 プラットフォーム固有ファイルへの<adfmf:deviceLocation>のマッピング

cordova.plistファイル内の<key>へのマッピング config.xmlファイル内の<plugin name>へのマッピング AndroidManifest.xmlファイル内の権限へのマッピング
<dict>
  <key>Plugins</key>
  <dict>
    <key>Geolocation</key>
    <string>CDVLocation</string>
    <key>Compass</key>
    <string>CDVLocation</string>
  </dict>
</dict>
<plugin name="Geolocation" value="org.apache.cordova.GeoBroker"/>
<plugin name="Compass" value="org.apache.cordova.CompassListener"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>

<adfmf:devicePushNotifications>

表21-12は、MAFが<adfmf:deviceSMS allowAccess="true"/>をプラットフォーム固有ファイルにマッピングする方法を示しています。

表21-12 プラットフォーム固有ファイルへの<adfmf:devicePushNotifications>のマッピング

cordova.plistファイル内の<key>へのマッピング config.xmlファイル内の<plugin name>へのマッピング AndroidManifest.xmlファイル内の権限へのマッピング
<key>Plugins</key>
<dict>
    <key>PushPlugin</key>
    <string>PushPlugin</string>
</dict>
<plugin name="PushPlugin" value="com.plugin.gcm.PushPlugin"/>

該当なし。


21.7 アプリケーション機能からのユーザーのログアウトの有効化

MAFでは、保護された内容が含まれるか、制約により制限されているアプリケーション機能からユーザーがログアウトした場合、アプリケーション機能は終了されず、ユーザーはアプリケーション内に残り、匿名ユーザーとして保護されていない内容や機能にアクセスできます。MAFでは制約を再度初期化できるため、ユーザーは同じアイデンティティを使用してアプリケーションに繰り返しログインできます。また、ユーザーが異なるアイデンティティを使用してログインできることにより、複数のアイデンティティでアプリケーションへのアクセスを共有することもできます。

Oracle Fusion Middleware Oracle Mobile Application Framework Java APIリファレンスで説明しているAdfmfJavaUtilitiesクラスのlogoutFeatureおよびlogoutメソッドにより、ユーザーはアプリケーションの起動後、認証サーバーに対する明示的なログインおよびログアウトを実行できます。また、これらにより、ユーザーは保護されたアプリケーション機能を呼び出した後に認証サーバーにログインできます。ユーザーは個々のアプリケーション機能からログアウトできますが、同じ接続によって保護されているアプリケーション機能からも同時にログアウトすることになります。

これらのメソッドを使用して、ユーザーは次のことを実行できます。

現在の認証サーバーからのログアウトを有効にするには、次のようにAdfmfJavaUtilitiesクラスのlogoutメソッドをコールします。次に例を示します。

import oracle.adfmf.framework.api.AdfmfJavaUtilities;
...
   AdfmfJavaUtilities.logout();

keyパラメータに関連付けられた認証サーバーからのログアウトを有効にするには、次のようにlogoutFeatureメソッドをコールします。

import oracle.adfmf.framework.api.AdfmfJavaUtilities;
...
   AdfmfJavaUtilities.logoutFeature(adfCrendentialStorykey);

adfCredentialStorykeyパラメータは、connections.xmlファイル内のadfCredentialStoreKeyパラメータに対して定義されている値からStringオブジェクトとして戻されます。AdfmfJavaUtiltiesクラスおよびkeyパラメータの使用方法の詳細は、Oracle Fusion Middleware Oracle Mobile Application Framework Java APIリファレンスを参照してください。

21.8 SSLのサポート

MAFは、cacerts証明書ファイル(クライアント・アプリケーションとサーバー間のHTTPSハンドシェイクのJavaメカニズム)を提供します。第3.2.2.1項「アプリケーション・コントローラ・プロジェクト・レベルのリソースについて」に示されているように、JDeveloperは、アプリケーション・リソースのSecurityフォルダ内にこのファイルを作成します(JDeveloper\mywork\application name\resources\Security\cacertsにあります)。MAFのcacertsファイルにより、信頼できる既知のソースからの一連の証明書がJVM 1.4に対して識別され、デプロイメントが可能になります。カスタム証明書を必要とするアプリケーションでは(RSA暗号化が使用されていない場合など)、アプリケーションをデプロイする前にプライベート証明書を追加する必要があります。

始める前に

cacertsファイルおよびkeytoolユーティリティの使用方法については、Java SEテクニカル・ドキュメント(http://download.oracle.com/javase/index.html)を参照してください。

プライベート証明書を追加するには:

  1. プライベート証明書を作成します。たとえば、new_certという証明書ファイルを作成します。

  2. 次のようにして、プライベート証明書をアプリケーションに追加します。

    1. シードされたcacertsファイル(cp cacerts cacerts.org)のコピーを作成します。

    2. Java SE keytoolユーティリティを使用して、cacertsファイルに証明書を追加します。例21-10は、new_certというcacertsファイルへの証明書の追加を示しています。

      例21-10 keytoolユーティリティを使用した証明書の追加

      keytool -importcert              
              -keystore cacerts 
              -file new_cert
              -storepass changeit
              -noprompt
      

      例21-10は、単一の証明書の追加方法を示しています。各証明書に対して同じ手順を繰り返します。表21-13には、keytoolのオプションがリストされています。

      表21-13 証明書の追加に関するオプション

      オプション 説明

      -importcert

      証明書をインポートします。

      -keystore cacerts file

      インポートされた証明書のファイルの場所を特定します。

      -file certificate file

      新しい証明書を含むファイルを特定します。

      -storepass changeit

      cacertsファイルのパスワードを提供します。デフォルトでは、パスワードはchangeitです。

      -noprompt

      証明書を信頼するかどうかを(stdinを介して)ユーザーに確認しないように、keytoolに指示します。


    3. 新しいcacertsファイルの内容を目で見て調べて、すべてのフィールドが正しいことを確認します。次のコマンドを使用します。

      keytool -list -v -keystore cacerts | more
      
    4. 証明書が指定のホスト名に対するものであることを確認します。


      注意:

      証明書の共通名(CN)は、ホスト名と正確に一致している必要があります。


    5. JVM 1.4が読み取れるようにするために、カスタマイズされた証明書ファイルはSecurityディレクトリ(JDeveloper\mywork\application name\resources\Security)に確実に配置してください。

  3. アプリケーションをデプロイします。


    注意:

    デプロイメント時、証明書ファイルがSecurityディレクトリに存在している場合、MAFは、それをAndroidまたはXcodeテンプレート・プロジェクトにコピーし、cacertsファイルのデフォルト・コピーを置き換えます。


  4. 保護されているリソースにSSL経由でアクセスできることを確認します。