プライマリ・コンテンツに移動
Oracle® Mobile Application Framework Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発
2.3.3
E82940-01
目次へ移動
目次

前
次

30 MAFアプリケーションの保護

この章では、MAF内のセキュリティ・フレームワークの概要と、セキュリティが適用されるようにMAFアプリケーションを構成する方法について説明します。

この章の内容は次のとおりです。

30.1 MAFセキュリティの概要

ユーザー・アクセス関連の制約で保護もバインドもされていないデフォルト機能がアプリケーションに含まれていると、保護されたアプリケーション機能のユーザー認証が迂回されてしまします。Oracle Mobile Security Access Serverが要求される認証タイプにあわせて構成されていると、これによって、コンテナ化されたアプリケーションのユーザーが認証されます。

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

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

  • デフォルトのアプリケーション機能を通じて公共の情報にアクセスすることを匿名ユーザーに許可する一方、認可されたユーザーのみが保護された情報にアクセスできるようにする。

  • 保護されたアプリケーション機能にアクセスする必要がある場合にのみユーザーを認証するようにします。そうでない場合、ユーザーは匿名ユーザーとしてMAFアプリケーションにアクセスでき、保護された機能に移動するにはログインします。

  • アクセスを保護する必要がない場合に、保護されているアプリケーション機能からログアウトすることをユーザーに許可し、それにより権限のないユーザーが保護されているアプリケーション機能にアクセスすることを明示的に禁止する。

注意:

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

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

MAFアプリケーションでは、デフォルト・ページまたはHTMLで記述されたカスタマイズ済のログイン・ページが使用されます。

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

開発者は、デプロイメント時にMAFアプリケーションをコンテナ化するように選択できます。コンテナ化により、Oracle Mobile Security Suite (OMSS)で構成されたエンタープライズ・ネットワーキング・プラットフォームのセキュア・ネットワーキングおよびネットワーク・トンネリング機能をアプリケーションで利用できます。コンテナ化されたアプリケーションの配布は、Oracle Mobile Security Access Server (MSAS)コンポーネントのアプリケーション・カタログおよびSecure Workspaceコンテナ機能を使用して、OMSS管理者によって管理されます。ユーザーの認証は、対象の認証タイプに構成されたMSASによって実行されます。MAFアプリケーションの開発およびOMSSのコンテナ化の詳細は、「エンタープライズ配布のためのMAFアプリケーションのコンテナ化」を参照してください。

第30.2項 ユーザー・ログイン・プロセスについて

MAFは、Webログイン・ページでログインして認証されたユーザーにWebビュー、ページ、またはユーザー・インタフェース・コンポーネントを表示します。MAFは、ログインが有効になるまで試行して、構成された間隔後にログインがタイム・アウトになります。

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

注意:

コンテナ化されたMAFアプリケーションのログイン・プロセスの変更の詳細は、「コンテナ化されたMAFアプリケーションの認証プロセスの概要」を参照してください。

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

    図30-1 デフォルトのログイン・ページ

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

    注意:

    「カスタム・ログイン・ページ」で説明されているように、MAFでは、デフォルトのログイン・ページが提供されるだけでなく、カスタム・ログイン・ページの使用もサポートされています。

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

    注意:

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

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

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

注意:

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

30.3 MAFアプリケーションの認証プロセスの概要

MAFは、HTTP基本認証、OAuth認証およびWeb SSO認証のプロトコルをサポートし、リモート・ログイン・サーバーに対してアプリケーション・ユーザーを認証します。リモート認証の成功時に、MAFは資格証明をローカルに保管して、それ以降の認証がローカルになるようにします。

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

  • HTTP Basic

  • OAuth

  • Web SSO

注意:

現在、ユニバーサルWindowsプラットフォームにデプロイしたMAFアプリケーションは、HTTP基本のみをサポートしています。

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

ヒント:

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

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


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

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

ローカル

  • HTTP Basic

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

リモート

  • HTTP Basic

  • OAuth

  • Web SSO

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

ハイブリッド

  • HTTP Basic

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


コンテナ化されたMAFアプリケーションの認証プロセスの変更の詳細は、「コンテナ化されたMAFアプリケーションの認証プロセスの概要」を参照してください。

30.4 コンテナ化されたMAFアプリケーションの認証プロセスの概要

デプロイメント時に、アプリケーションはOracle Mobile Security SuiteのMobile Security Access Serverコンポーネントを使用するようにコンテナ化できます。これにより、アプリケーションは、モバイルVPNを使用することなく、企業のファイアウォールの先にあるリソースにアクセスできます。MSASは、ユーザー認証のために、登録済MAFアプリケーションにコンテナのシングル・サインオン統合を提供します。

MAFアプリケーションを開発する場合は、ログイン接続を定義してセキュア機能を開発およびテストする必要があります。テスト中、保護されたリソースにアクセスする前に、MAFログイン・ページが認証に使用されます。デプロイメント時には、MAFアプリケーションをコンテナ化することで、Oracle Mobile Security Suite (OMSS)で構成されたエンタープライズ・ネットワーキング・プラットフォームのセキュア・ネットワーキングおよびネットワーク・トンネリング機能を利用できるため、モバイルVPNは不要になります。

コンテナ化されたMAFアプリケーションのデプロイメント後に、企業ファイアウォールの背後にあるバックエンド・リソースへのアクセスでは、OMSSのコンポーネントであるMobile Security Access Server (MSAS)を利用して、モバイル・デバイスから企業リソースへのトラフィックを保護する集中アクセス・ポイントを提供します。この場合、ユーザーの最初の認証で使用するために認証エンドポイントを実行するようにMSASインスタンスが構成されます。

ユーザー認証は、MSASによって登録済MAFアプリケーションに提供されるコンテナのシングル・サインオン(SSO)統合によって処理されます。MAFアプリケーションがMSASと通信できるようにするには、ユーザーは、MSASインスタンスに構成されている認証のタイプのSecure Workspaceアプリケーションをインストールおよび登録する必要があります。次に、保護されたリソースへのアクセスをユーザーが試みると、MAFログイン・ページが非表示になり、ユーザーのモバイル・デバイスのSecure Workspaceアプリケーションから独自のログインがMSASに表示されます。

注意:

MSASによる認証を有効にし、AppTunnelを利用するには、MAFアプリケーションで定義されるログインURLまたは認証エンドポイントをプロキシするようにMSASインスタンスを構成する必要があります。MAFログイン接続用にMSASを構成する方法の詳細は、「ログイン接続およびコンテナ化されたMAFアプリケーションへのアクセスに関する必知事項」を参照してください。

MSAS AppTunnelを使用してバックエンド・リソース・リクエストがプロキシされるかどうかは、MAFアプリケーションおよびSecure Workspaceアプリケーションで使用される、MSASで生成されるのプロキシ自動構成ファイルによって決定されます。AppTunnelは、コンテナ化されたMAFアプリケーションへのセキュアなアクセスを提供する各Secure Workspaceアプリケーションから相互認証されたSSLトンネルです。AppTunnelはすべてのデータを移動中に暗号化し、デバイス・レベルのモバイルVPNが対象となるユーザーのモバイル・デバイス上のローグ・アプリケーションからの保護を提供します。

「エンタープライズ配布のためのMAFアプリケーションのコンテナ化」を参照してください。

30.5 MAF接続の構成

アプリケーション機能は、アプリケーション・ログイン・サーバーへの接続を少なくとも1つ定義することで保護できます。

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

第30.5.1項 MAFログイン接続の作成方法

ログインの接続タイプを作成して、ローカル認証とリモート認証の両方を有効にします。タスク内の手順に従って、MAF接続の作成ダイアログを使用してログイン・サーバー接続を作成します。

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

  • HTTP Basic

  • OAuth

  • Web SSO

注意:

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

図30-2 認証の構成

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

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

  1. 次のアクションのいずれかを実行します。
    • ナビゲータで、「ディスクリプタ」ノード、「ADF META-INF」と開き、maf-application.xmlをダブルクリックします。次に、maf-application.xmlファイルの概要エディタで、「セキュリティ - 認証とアクセス制御」セクションを展開し、「作成」をクリックします(図30-3を参照)。

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

      この図は周囲のテキストで説明しています
    • または、「新規ギャラリ」「接続」を選択して、「MAFログイン・サーバー接続」を選択します。

  2. 「MAFログイン接続の作成」ダイアログで、目的の「認証サーバー・タイプ」を選択します。
  3. 次の項の説明に従って接続タイプを構成します。

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

30.5.2 マルチテナント対応MAFログイン接続の作成方法

MAFアプリケーション接続は、様々な組織やテナントで共有可能なホスト・アプリケーション機能をサポートできます。タスク内の手順に従って、サーバーへのマルチテナント対応の接続を構成します。

図30-4に示すように、「MAFログイン接続の作成」ダイアログを使用して、1つのアプリケーションに異なる組織(テナント)で共有可能な1つのホスト・アプリケーション機能が含まれ、それが特定のテナントによって所有されているように見える、マルチテナントの概念がサポートされたMAFアプリケーション接続を作成できます。HTTP基本認証プロトコルをサポートするサーバーへのマルチテナント対応接続を構成できます。

図30-4 マルチテナント対応の接続の構成

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

図30-5に示すように、MAFアプリケーションで表示されるマルチテナント対応の接続が定義されたデフォルトのログイン・ページでは、HTTPリクエストでテナント値を伝播するため、ユーザーにドメインIDの入力が要求されます。

図30-5 マルチテナント対応の接続用のデフォルト・ログイン・ページ

このイメージについては周囲のテキストで説明しています。
マルチテナント対応ログイン・サーバーを作成する手順:
  1. 次のアクションのいずれかを実行します。
    • ナビゲータで、「ディスクリプタ」ノード、「ADF META-INF」と開き、maf-application.xmlをダブルクリックします。次に、maf-application.xmlファイルの概要エディタで、「セキュリティ - 認証とアクセス制御」セクションを展開し、「作成」をクリックします(図30-6を参照)。

      図30-6 サーバー接続の追加

      このイメージについては周囲のテキストで説明しています。
    • または、「新規ギャラリ」「接続」を選択して、「MAFログイン・サーバー接続」を選択します。
  2. 「MAFログイン接続の作成」ダイアログで、マルチテナント・ログインに対応している「認証サーバー・タイプ」を選択します。
  3. 図30-4に示すように、「カスタム・ヘッダー」タブをクリックして、次を構成します。
    • マルチテナント対応: MAFアプリケーション接続にマルチテナント対応を定義する場合に選択します。「マルチテナント対応接続を作成する場合の処理」も参照してください。

    • マルチテナント対応スキーム: テナントのドメインIDを認証サーバーに伝播する場合に使用するスキームを選択します。個別のヘッダーとして送信するには、「カスタム・ヘッダー」(デフォルト)を選択します。「ユーザー名」オプションは下位互換性をサポートし、テナントIDをユーザーIDの一部として送信します(ユーザー名の混在と呼ばれます)。

    • ヘッダー名: 認証サーバーで必要とされるテナント・ヘッダー名を入力します。たとえば、ログイン中にユーザーにテナントIDを求めるには、マルチテナント・ヘッダー名(X-ID-TENANT-NAME)を入力します。図30-5に示すように、デフォルトのログイン・ページによって、ドメイン名の入力がユーザーに求められます。

    • カスタム・ヘッダー: オプションで、認証の実行に必要な追加のカスタム・ヘッダー名を入力します。これらは、マルチテナント・ヘッダーに加えて構成される場合があります。「カスタム・ヘッダーに関する必知事項」も参照してください。

      カスタム・ヘッダーのヘッダー値がわかっている場合は、値を入力します。指定されたカスタム・ヘッダーの値がログイン中にオーバーライドされる場合は、対応する「値」フィールドを空のままにします。実行時にヘッダー値を指定する場合は、OverrideConnectionHandler APIを使用して値をプログラムで設定する必要があります。APIを使用してヘッダーを構成する方法の詳細は、「認証前にログイン資格証明をプログラムで構成する方法」を参照してください。

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

30.5.3 基本認証の構成方法

基本認証に対応した接続を構成する場合は、「認証サーバー・タイプ」「HTTP基本」を選択する必要があります。タスク内の手順に従って、「MAFログイン接続の作成」ダイアログを使用して基本認証を構成します。

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

図30-7 Basic認証の構成

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

基本認証を構成するには:

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

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

  2. 「一般」タブで、次を定義します。
    • 接続モード: 表30-1に示すように、認証のタイプを選択します。

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

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

      注意:

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

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

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

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

      注意:

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

  3. 図30-8に示すように、「HTTP基本」タブをクリックして、次を構成します。
    • ログインURL: ログイン・ページのログインURLを入力します。

      ログインURLには、リモート・サーバー上のログイン・ページではなく、HTTP基本認証のユーザー名/パスワードのチャレンジを表示する、保護されたページを指定します。ログインURLは、リクエスト時にファイル転送が発生しないWebリソースを指している必要があります。ファイル・リソースを指すことはできません。

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

      ログアウトURLはログインURLと同じ場合もあれば、セッションで追加アクション(無効化など)を実行するリモート・サーバーへのURLの場合もあります。ログアウトURLは、リクエスト時にファイル転送が発生しないWebリソースを指している必要があります。ファイル・リソースを指すことはできません。

    図30-8 Basic認証の構成

    このイメージについては周囲のテキストで説明しています。
  4. オプションで、図30-4に示すように、「カスタム・ヘッダー」タブをクリックして、次を構成します。
    • カスタム・ヘッダー: 認証の実行に必要な任意のカスタム・ヘッダー名を入力します。「カスタム・ヘッダーに関する必知事項」も参照してください。

      カスタム・ヘッダーのヘッダー値がわかっている場合は、値を入力します。指定されたカスタム・ヘッダーの値がログイン中にオーバーライドされる場合は、対応する「値」フィールドを空のままにします。実行時にヘッダー値を指定する場合は、OverrideConnectionHandler APIを使用して値をプログラムで設定する必要があります。APIを使用してヘッダーを構成する方法の詳細は、「認証前にログイン資格証明をプログラムで構成する方法」を参照してください。

    • マルチテナント対応: このオプションを選択して、MAFアプリケーション接続にマルチテナント対応を定義できます。詳細は、「マルチテナント対応MAFログイン接続の作成方法」を参照してください。

  5. 「自動ログイン」タブをクリックし、「ログイン資格証明の格納方法」の説明に従ってパラメータを構成します。
  6. 「認可」タブをクリックし、「アクセス制御の構成方法」の説明に従ってパラメータを構成します。
  7. 「一般」タブをクリックし、「接続のテスト」をクリックします。
  8. 「OK」をクリックします。

第30.5.4項 OAuth認証の構成方法

アプリケーションは、リモート・サーバーに保管されている保護されたデータまたはサービスにアクセスできます。OM_PROP_OAUTH_OAUTH20_SERVERプロパティ・キーを使用するようにサーバーを構成し、タスク内の手順に従って、OAuthサーバーによる認証を構成します。

図30-9に示すように、「MAFログイン接続の作成」ダイアログを使用して、リモート・サーバーに保管されている保護されたデータまたはサービスへのアプリケーションのアクセスを構成する方法を構成します。

図30-9 OAuthの構成

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

始める前に:

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

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

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

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

  2. 「一般」タブで、次を構成します。
    • 「接続名」: 接続の名前を入力します。

  3. 「OAuth」タブをクリックし、図30-10に示すように、次を構成します。
    • 「権限タイプ」ドロップダウン・リストから、適切な権限タイプを選択します。

      • サーバー・ログイン・ページを表示する場合は、「認可コード」を選択します。

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

      • MAFアプリケーションが、ユーザーIDまたはユーザー資格証明なしで、匿名でリソースにアクセスできるようにする場合は、「クライアント資格証明」を選択します。

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

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

    • ユーザーのログアウト時にリダイレクトされる「ログアウトURL」を入力します。このフィールドは必須入力で、URLパラメータは特定の認証プロバイダによって決まります。

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

    図30-10 クライアントIDおよびエンド・ポイントの構成

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

30.5.5 MAFアプリケーションでのシングル・サインオンの構成方法

MAFでは、開発したMAFアプリケーションで外部アイデンティティ・プロバイダを使用してユーザーを認証できるように、SSOを構成できます。MAFアプリケーションのユーザーは、その後、指定したアイデンティティ・プロバイダがそのユーザーの認証を正常に完了すると、1つ以上の保護されたサービスにアクセスできます。

MAFでは、すべてのプラットフォーム(Android、iOSおよびユニバーサルWindowsプラットフォーム)にデプロイされるMAFアプリケーションでのSSOがサポートされています。フェデレーテッドSSOは、AndroidおよびiOSプラットフォームにデプロイされたMAFアプリケーションでサポートされています。

SSOの構成に使用するアイデンティティ・プロバイダは、Azure Active Directoryのインスタンスなど、企業ドメインでホストされるサードパーティ・アイデンティティ・プロバイダ、またはMAFアプリケーションがたとえばOracle Mobile Cloud Service (MCS)などに接続する、バックエンド・サービスのためにすでに構成されているどのようなアイデンティティ・プロバイダにもできます。

OAuth2トークン・ポリシーで保護されているサービスへの送信リクエストにMAFによってOAuthアクセス・トークンが含まれているトークン・リレー・サービスの使用もサポートされています。SSO接続の構成時に、「トークン・リレー・レスポンスの解析」チェック・ボックスを選択することで、このサポートを有効にします。その後、MAFではRFC 6749 - OAuth 2.0認可フレームワーク内でインターネット技術タスク・フォースによって提唱されているアクセス・トークン・フォーマットに適合するログイン成功URLからJavaScript Object Notation (JSON)レスポンスを受け取ります。MAFでは、JSONレスポンスからOAuthアクセス・トークンを取得し、保護されたサービスへのMAFアプリケーション・リクエスト内にそれを含めます。次の例では、OAuthアクセス・トークンの取得のためにMAFで解析される、有効なJSONレスポンスを示します。MAFでは、JSONレスポンスに含まれる場合があるその他のカスタム・フィールドは無視されます。
     {
       "access_token":"2YotnFZFEjr1zCsicMWpAA",
       "token_type":"example",
       "expires_in":3600,
       "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
       "example_parameter":"example_value"
     }

注意:

「トークン・リレー・レスポンスの解析」チェック・ボックスを選択すると、MAFで、ログインURLに問合せパラメータとしてformat=JSONが含まれます。URLでこの問合せパラメータを指定する必要はありません。

MCSのために構成されているアイデンティティ・プロバイダを使用する場合は、MAFアプリケーション内で構成する接続URL内の問合せパラメータとして、MAFアプリケーションが接続するMCSモバイル・バックエンドIDによって発行された、OAuth ConsumerのためのクライアントIDを提供します。次の例では、MCSモバイル・バックエンドで構成されるSSOをアプリケーションで使用できるようにする接続のために、MAFアプリケーションのconnections.xmlファイル内で生成されたエントリのサブセットを示します。

<Contents>
  <login url="http://yourmcsinstance.com/sso/token?clientID=C490B55...FO51"/>
  <logout url="http://yourmcsinstance.com/sso/appLogout"/>
  <loginSuccessUrl url="http://yourmcsinstance.com/sso/success/token?clientID=C490B55...FO51">
    <parseTokenRelayResponse value="true"/>
  </loginSuccessUrl>
  <loginFailureUrl url="http://yourmcsinstance.com/sso/appError"/>
  …
</Contents>

シングル・サインオン認証を構成するには、次の手順を実行します。

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

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

  2. 「一般」タブで、次を構成します。
    • 「接続名」: 接続の名前を入力します。

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

  3. 「Web SSO」タブをクリックし、図30-11に示すように、成功したログインおよび失敗したログインを有効化する次のURLを構成します。
    • ログインURL: MAFアプリケーションの移動先でユーザーに証明書の入力を求める必要がある場合に、その移動先のURLを入力します。ログインURLは、リクエスト時にファイル転送が発生しないWebリソースを指している必要があります。ファイル・リソースを指すことはできません。MCSへのログイン接続を作成する場合、ログインURLには、MAFアプリケーションが接続するMCS MBEによって指定されたクライアントIDに設定されている、問合せパラメータが含まれている必要があります。MCSからこのクライアントの値を取得します。

    • ログアウトURL: サーバー・セッションを終了してユーザーをログアウトする、サーバー側URLを入力します。ログアウトURLは、リクエスト時にファイル転送が発生しないWebリソースを指している必要があります。ファイル・リソースを指すことはできません。

      MCSへの接続を構成する場合は、ログアウトURLが次に示す書式に従っていることを確認して、ログイン後のリダイレクトが期待どおりに動作するようにしてください。

      //A production instance of MCS
      https://{hostname}/logout.html?end_url=/mobileui
      //A development instance of MCS
      https://{hostname}/oam/server/logout
      
    • ログイン成功URL: ユーザーが認証成功後にリダイレクトされるターゲットURLを入力します。

      ログイン成功URLはログインURLと同じにできます。たとえば、ログインURLとログイン成功URLがhttp://www.mysite.comの場合、ユーザーがブラウザでhttp://www.mysite.comを指定すると、ブラウザはまずサイトのログイン・ページにリダイレクトされ、そこで認証に成功するとhttp://www.mysite.comに再びリダイレクトされます。その後、MAFでは、ログイン成功URLによって指定されたページを検出すると、ログイン・プロセスを完了してリクエストされた機能をアクティブにします。このようにして、ログイン成功URLページの内容がユーザーに表示されることなく、ユーザーはMAF機能にアクセスできるようになります。MCS MBEへのログイン接続を作成する場合は、「ログインURL」に入力するURLと同様に、MCS MBEで指定されたクライアントIDに設定されている、問合せパラメータを含めます。

      • トークン・リレー・レスポンスの解析: OAuthトークンのためのログイン成功URL JSONレスポンスを解析するには、このチェック・ボックスを選択します。MAFアプリケーションでは、保護されたサービスにアクセスするために、取得したOAuthトークンが使用されます。このチェック・ボックスを選択すると、アプリケーションのconnections.xmlファイル内に<parseTokenRelayResponse value="true"/>が生成されます。

    • ログイン失敗URL: ユーザーが認証失敗後にリダイレクトされるURLを入力します。失敗用のURLがない場合は、任意のURLを入力します。

      ブラウザにログイン失敗URLがロードされると、MAFはまずエラーを検出してから、アプリケーションに制御を戻します。これは、MAFアプリケーションによってユーザーのログイン試行回数が制限されている場合に有用です。この場合、ユーザーが許容回数の最後の試行で認証に失敗すると、MAFによってログイン失敗URLにリダイレクトされます。

      失敗用のURLがない場合は、任意のURLを入力しても構いません。この場合、ユーザーがログイン・ページ上の「取消」をクリックするか、所定の期間内にユーザー・アクションが行われなかったためにログインがタイム・アウトすると(非アクティブのタイムアウトは2分)、認証が終了します。

      図30-11 認証URLの構成

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

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

MAFアプリケーション・ログインのすべての接続属性が設計時にわからない場合は、AdfmfJavaUtilities.updateSecurityConfigWithURLParameters APIを使用して、プレースホルダ接続を定義します。タスク内の手順に従って、実行時にプレースホルダ接続を定義するように構成します。

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

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

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

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

設計時にプレースホルダ接続の定義を構成するには:

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

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

  2. 「一般」タブで接続名を入力します。

    「実行時の名前付き接続の接続属性の更新方法」で説明されているように、アプリケーション開発者は、この識別子を使用して更新する接続を識別します。

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

30.5.7 実行時の名前付き接続の接続属性の更新方法

AdfmfJavaUtilitiesクラスのoverrideConnectionPropertyメソッドとupdateSecurityConfigWithURLParametersメソッドを使用して、既存の接続の接続属性を定義または再定義します。どちらのメソッドも、AdfmfJavaUtilitiesclearSecurityConfigOverrides APIとupdateApplicationInformation APIで使用します。

AdfmfJavaUtilitiesクラスでは、overrideConnectionPropertyおよびupdateSecurityConfigWithURLParametersメソッドが提供され、アプリケーション開発者は、すでに存在する接続の接続属性の定義または再定義に使用できます。この接続属性は、プレースホルダ(「MAFログイン接続の作成」ダイアログで「実行時に値を指定」を選択する場合)、または完全に作成された接続定義のいずれかです。両方のメソッドは、これもまたAdfmfJavaUtilitiesクラスによって提供される、clearSecurityConfigOverridesおよびupdateApplicationInformation APIと連携して起動する必要があります。

updateSecurityConfigWithURLParametersメソッドは、認証のみに必要なパラメータを更新します。connections.xml内で接続を指定する追加パラメータは、updateSecurityConfigWithURLParametersメソッドを使用して更新できません。updateSecurityConfigWithURLParametersですべてのパラメータを更新できるのと同様に、overrideConnectionPropertyを使用してすべての非認証パラメータを更新します。

注意:

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

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

AdfmfJavaUtilities.clearSecurityConfigOverrides(loginConnectionName);
AdfmfJavaUtilities.updateSecurityConfigWithURLParameters(configUrlParam, key, message, showConfirmation);
// Final step to apply the changes
AdfmfJavaUtilities.updateApplicationInformation(false);

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

configUrlParamパラメータに渡す文字列の値は、UTF-8エンコードで、次のように書式設定する必要があります。

String parameterString = "http://settings?" +
  "&<Parameter Name1>::=<Parameter Value1>" +
  "&<Parameter Name2>::=<Parameter Value2>" +
  ...
  "&<Parameter NameN>::=<Parameter ValueN>";

たとえば、configUrlParamパラメータに次の値を渡します。

http://settings?AuthServerType::=HTTPBasicAuthentication
&ApplicationName::=Approvals
&LoginURL::=http://hostname.com:8008/OA_HTML/RF.jsp?function_id=mLogin
&LogoutURL::=http://hostname.com:8008/OA_HTML/RF.jsp?function_id=mLogout
&SessionTimeOutValue::=28800
&IdleTimeOutValue::=7200
&CryptoScheme::=PlainText

URLは、次のように作成する必要があります。

http://settings?AuthServerType::=HTTPBasicAuthentication&ApplicationName::=Approvals&LoginURL::=http%3A%2F%2Fhostname.com%3A8008%2FOA_HTML%2FRF.jsp%3Ffunction_
id%3DmLogin&LogoutURL::=http%3A%2F%2Fhostname.com%3A8008%2FOA_HTML%2FRF.jsp%3Ffunction_id%3DmLogout&SessionTimeOutValue::=28800&IdleTimeOutValue::=7200&CryptoS
cheme::=PlainText

updateSecurityConfigWithURLParametersおよびoverrideConnectionPropertyメソッドについては、さらに次の点に注意してください。

  • overrideConnectionPropertyでは、MAFアプリケーションが次にそのログイン接続を使用するまで構成の変更が永続化されないのに対し、updateSecurityConfigWithURLParametersメソッドでは、即時に新しい構成が永続化されます。たとえば、エンド・ユーザーがログイン接続によって保護されている機能に移動すると、MAFによってログイン・ビューが表示されます。

  • overrideConnectionPropertyを使用して接続参照内の任意のトップ・レベルのプロパティを再構成でき、再構成できる接続参照はconnections.xmlファイル内のログイン接続に限定されません。updateSecurityConfigWithURLParametersメソッドは、ログイン接続の更新にのみ使用できます。

  • updateSecurityConfigWithURLParametersのコールがそれ以前のupdateSecurityConfigWithURLParametersのコールを再構成し、その結果として、新しいログインURLのたびにupdateSecurityConfigWithURLParametersがコールされるのに対し、overrideConnectionPropertyのコールは累積されます。次の例は、一連のoverrideConnectionPropertyコールで、MyLoginConnectionという名前の接続のloginlogoutおよびaccessControlプロパティの値をオーバーライドする方法を示しています。

    AdfmfJavaUtilities.clearSecurityConfigOverrides("MyLoginConnection");
    AdfmfJavaUtilities.overrideConnectionProperty("MyLoginConnection", "login", "url", newLoginUrl);
    AdfmfJavaUtilities.overrideConnectionProperty("MyLoginConnection", "logout", "url", newLogoutUrl);
    AdfmfJavaUtilities.overrideConnectionProperty("MyLoginConnection", "accessControl", "url", newAccessControlUrl);
    AdfmfJavaUtilities.updateApplicationInformation(false);
    
  • overrideConnectionProperty (String node)の2番目のパラメータの値は、connections.xmlファイルで使用されるパラメータ名です。たとえば、次の接続を更新するには:

    <Reference name="remotePage" className="oracle.adf.model.connection.url.HttpURLConnection" xmlns="">
        <Factory className="oracle.adf.model.connection.url.URLConnectionFactory"/>
        <RefAddresses>
          <XmlRefAddr addrType="remotePage">
            <Contents>
              <urlconnection name=" remotePage_urlconnectionName " url="http://www.google.com"/>
            </Contents>
          </XmlRefAddr>
        </RefAddresses>
      </Reference>
    

    URLを変更するoverrideConnectionPropertyを次のようにコールします。

    overrideConnectionProperty("remotePage", "urlconnection", "url", "http://www.oracle.com");

    これは、updateSecurityConfigWithURLParametersと同じパラメータ名ではありません。updateSecurityConfigWithURLParametersを使用する場合は、前述のURL作成パターンに従います。connections.xmlファイルの内容に関する知識は必要ありません。

oracle.adfmf.framework.api.AdfmfJavaUtilitiesクラスおよびconfigUrlParamパラメータの使用方法の詳細は、Oracle Mobile Application Framework Java APIリファレンスを参照してください。

overrideConnectionPropertyを使用して接続プロパティの値をオーバーライドする方法の詳細は、「認証前にログイン資格証明をプログラムで構成する方法」を参照してください。ConfigServiceDemoサンプル・アプリケーションのConfigServiceHandler.javaでは、overrideConnectionPropertyメソッドを起動して、いくつかの接続プロパティをオーバーライドする方法を示しています。ConfigServiceDemoサンプル・アプリケーションの詳細は、「サンプルのMAFアプリケーション」を参照してください。

第30.5.8項 ログイン資格証明の格納方法

ログインすることなくMAFアプリケーションにアクセスするために、MAFで資格証明、ユーザー名および自動ログインを保管することもできます。「MAFログイン接続の作成」ダイアログの「自動ログイン」オプションを使用して、資格証明の保管オプションを選択します。

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

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

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

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

注意:

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

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

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

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

30.5.9 MAFアプリケーションの接続の作成時に行われる処理

アプリケーションの接続情報は、connections.xmlファイルで得られます。このファイルは、アプリケーションにバンドルできます。このファイルが構成サービス用にホストされている場合、MAFはアプリケーションの起動時ごとに更新された構成情報についてチェックします。

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

注意:

MAFアプリケーションの認証の要件として、JDeveloperではadfCredentialStoreKey属性をログイン接続参照と同じ名前に設定します(例: Connection_1)。connections.xmlファイルのadfCredentialStoreKey属性またはログイン接続名を編集する場合は、値を互いに同じに設定してください。同じ値を維持しないと、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"/>
               <logout url="http://10.0.0.0/SecuredWebServicelogout/logout"/>
               <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 Application Development FrameworkによるFusion Webアプリケーションの開発』のconnections.xmlファイルで定義されたルックアップに関する項を参照してください。

30.5.10 マルチテナント対応接続を作成する場合の処理

マルチテナント対応の接続を作成すると、MAFは、connections.xmlファイル内で<isMultiTenantAware>要素の値をtrueに設定します。

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

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

30.5.11 ログイン接続構成に関する必知事項

connections.xmlファイルまたはプログラム内でログインURLを定義するときには、そのURLがリクエスト時にファイル転送を発生しないWebリソースを指すようにする必要があります。

保護されたMAF機能へのアクセス権を付与するためのログインURLをconnections.xmlファイルまたはプログラムを使用して定義する場合、ログインURLはmydocument.txtのようなファイル・リソースを指すことはできません。このログインURLは、リクエスト時にファイル転送が発生しないWebリソースを指している必要があります。ファイル・リソースが使用されていると、MAFアプリケーションがハングするかログインに失敗して、ユーザーが保護されたMAF機能にアクセスできない場合があります。

30.5.12 ログイン接続およびコンテナ化されたMAFアプリケーションへのアクセスに関する必知事項

OMSSのAppTunnel機能を使用するには、MAFアプリケーションがリソースへのアクセスに使用するURIまたはエンドポイントをMobile Security Access Serverのインスタンスがプロキシするように構成します。ユーザーは、MAFとOMSSで2回認証されます。

Oracle Mobile Security Suite (OMSS) AppTunnel機能を使用して企業のリソースにアクセスするには、MAFアプリケーションによって使用されるURIまたはエンドポイントをプロキシしてリソースにアクセスするように、Mobile Security Access Server (MSAS)インスタンスを構成する必要があります。Oracle Mobile Security Access Serverの管理のモバイル・セキュリティ・アクセス・サーバー・アプリケーションの管理に関する項およびモバイル・セキュリティ・アクセス・サーバー・インスタンスの構成に関する項を参照してください。

HTTP基本認証はOMSSによってサポートされますが、MAFログイン・ページは、OMSS認証プロセスによって再度表示されるため、ユーザーは2回認証する必要があります。

コンテナ化されたMAFアプリケーションでの認証の詳細は、コンテナ化されたMAFプリケーションの認証プロセスの概要を参照してください。

30.5.13 ローカル接続およびハイブリッド・ログイン接続のための複数IDに関する必知事項

アプリケーションのライフサイクル内で、ユーザーは複数のIDを使用してローカルおよびハイブリッドのログイン接続モードでログインおよびログアウトできます。

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

注意:

ローカル接続とハイブリッド接続は、基本認証でのみ使用可能です。OAuthおよびFederate SSOはリモート認証を使用するため、認証が成功しない場合、アプリケーション・ユーザーはアプリケーションに再びログインできません。

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

MAFアプリケーションを移行するときには、maf-feature.xmlファイルで定義した認証モードが、connections.xmlファイルのauthenticationMode属性で定義されていることを確認します。

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">)の値を移行しないでください(移行すると、デプロイメントが失敗します)。

30.5.15 カスタム・ヘッダーに関する必知事項

MAFログイン接続の作成時にカスタム・ヘッダーが定義されていると、connections.xmlファイルには、customAuthHeaders要素と個別のヘッダーサブ要素が移入されます。ヘッダーの値は、OverrideConnectionHandler APIを使用することで実行時に構成できます。

カスタム・ヘッダーを定義して「MAFログイン接続の作成」ダイアログへの入力を完了すると、MAFは、connections.xmlファイルに、customAuthHeaders要素および各headerサブ要素を移入します。

カスタム・ヘッダーの値を実行時に指定すると、MAFアプリケーションはoracle.adfmf.framework.api.AdfmfJavaUtilitiesクラスのOverrideConnectionHandler APIを使用してヘッダー値を構成できます。oracle.adfmf.framework.api.AdfmfAuthConnectionクラスは、connection.xml XML要素がオーバーライドされている場合に、それらの要素にアクセスして最新の値を取得するための便利な方法です。APIを使用してヘッダーを構成する方法の詳細は、「認証前にログイン資格証明をプログラムで構成する方法」を参照してください。

ログイン(正しいヘッダー値の入力を含む)に成功すると、MAFはヘッダーの詳細をローカルの資格証明ストアに格納するため、HTTPリクエスト時に、セキュアなコール(RESTサービスに対するコールなど)にカスタム・ヘッダーを含めることができます。

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

MAFアプリケーションがREST Webサービスをコールするときに、ユーザーがローカルに認証されている場合、MAFはログイン・サーバーに対してユーザーを認証します。MAFは、ユーザーが認証されている場合に、REST Webサービスへのアプリケーション・リクエストを実行します。

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

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

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

MAFは、基本認証ヘッダーをHTTP要求に挿入して、アプリケーション機能が保護されたリソースにアクセスできるようにします。

MAFでは、Webビューから発行されたHTTPリクエストに基本認証ヘッダーを挿入することで、アプリケーション機能からセキュア・リソースにアクセスできます。これは、リモートのWebリソースが基本認証によって保護されており、認証に対してCookieが十分でないか、サーバーがCookieをまったく受け付けない状況に便利です。「MAFログイン接続の作成」ダイアログの「認可」タブにある「レルム」入力フィールドにリクエスト・レルムを指定します(開発時に把握している場合)。デプロイメント時に判明していない場合、実行時にAdfmfJavaUtilities.overrideConnectionPropertyを使用してリクエスト・レルムを変更できます。

次の例は、「レルム」入力フィールド(realm要素)に値を指定する場合の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"/>
               <userObjectFilter/>
            </Contents>
         </XmlRefAddr>
      </RefAddresses>
   </Reference>
</References>

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

Webサービスにはログイン・ページがありませんが、MAFはアクセスに必要とされる資格証明をWebサービス・コールのヘッダーに挿入します。挿入される資格証明は、認証サーバーへのログインに使用された後でMAFによって永続化された資格証明です。

Webサービスでは、ログイン・ページはなく、かわりに、MAFによってユーザー・アクセスが有効化され、Webサービス・コールのヘッダーに資格証明が挿入されます。Webサービスは、ローカルに格納されている資格証明(ユーザーによる認証サーバーへの最初のログインの成功後、MAFによって保持されている資格証明)を使用してアプリケーション・データにアクセスします。

ローカル資格証明ストアの名前は、ログイン・サーバー接続のadfCredentialStoreKey属性に反映されます(「MAFアプリケーションの接続の作成時に行われる処理」adfCredentialStoreKey="Connection_1"など)。Webサービスがこの資格証明ストアを使用できるようにするには、REST Webサービス接続のadfCredentialStoreKey属性に対して定義されている名前が、ログイン・サーバーのadfCredentialStoreKey属性に対して定義されている名前と一致する必要があります。connections.xmlファイルのadfCredentialStoreKey属性またはログイン接続名を編集する場合は、値を互いに同じに設定してください。同じ値を維持しないと、MAF実行時例外が発生します。

注意:

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

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

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

アプリケーションに保護対象のコンポーネントが含まれている場合は、そのコンポーネントがアクセス制御サービスを実装してホストするように構成します。タスク内の手順に従ってアクセス制御を構成し、ユーザーに許可したアプリケーション機能のみが使用可能になるようにします。

アクセス制御サービス(ACS)は、JSONを使用したRESTful Webサービスであり、オプションでMAFアプリケーションとは別の外部サーバー上にデプロイすることができます。通常は、アプリケーション機能に保護されたコンポーネントが含まれている場合に、ユーザーが単一のHTTP POSTメッセージを介して自身のユーザー・ロールと権限をダウンロードできるよう、MAFアプリケーションにACSサービスを提供します。このサービスをアプリケーションに提供する場合は、ACSサービスを実装してホストする必要があります(MAでは、このサービスは提供されません)。図30-14は、「MAFログイン接続の作成」ダイアログの「認可」ページを示したもので、このページを使用してMAFアプリケーションのアクセス制御を構成します。

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

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

アプリケーション・ログイン・サーバーによって付与されるアクセス制御は、「ユーザー制約とアクセス制御について」で説明されているように、アプリケーション機能用に構成された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ログイン接続の作成」ダイアログを開く方法の詳細は、「MAFログイン接続の作成方法」を参照してください。

  2. 図30-14に示すとおり、「認可」ページで、認可要件を完了します。
    • レルム: 開発時に把握している場合は、基本認証ヘッダーに追加するリクエスト・レルムを指定します(MAFはこの基本認証ヘッダーをHTTPリクエストに挿入します)。

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

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

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

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

アクセス制御サービスは、特定のユーザーのリクエスト・メッセージにロールまたは権限(またはその両方)を返すRESTful Webサービスです。

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

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

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

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

    • userId: ユーザーID。

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

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

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

注意:

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

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

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

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配列を定義することでフィルタ処理できます。フィルタ処理しない場合は、そのユーザーに割り当てられている権限のリスト全体が戻されます。

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

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

注意:

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

注意:

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

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

MAFは、ACSエンドポイントを定義するログイン接続に対してユーザーの認証が成功した後で、アクセス制御サービスを呼び出します。保護されたアプリケーション機能がACSを呼び出すときに、MAFは、アプリケーション・ログイン接続に関連付けられたすべてのアプリケーション機能に対するユーザー制約をフェッチします。

MAFは、図30-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パラメータは、connections.xmlファイルのadfCredentialStoreKeyパラメータに対して定義されている値からStringオブジェクトとして戻されます(「基本認証ヘッダーの挿入に関する必知事項」を参照)。appLoginパラメータをtrueに設定すると、ACSでフィーチャ・アクセスが再評価できます。OptionalExtraPayLoadパラメータは、今後の使用のために予約済であるため使用されません。

invokeACSメソッドまたはisAcsCalledAutomaticallyパラメータのいずれかを使用してACSを起動すると、アプリケーションにロール・ベースの制約が取得されます。

注意:

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

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

注意:

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

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

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

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

30.5.22 認証前にログイン資格証明をプログラムで構成する方法

oracle.adfmf.framework.api.AdfmfJavaUtilitiesクラスのoracle.adfmf.framework.api.AdfmfJavaUtilities APIを使用すると、MAFアプリケーションがユーザー認証のためにログイン接続を起動する前に、接続値をプログラムで設定できます。タスク内の手順に従って、接続値をプログラムでオーバーライドします。

MAFアプリケーションがログイン接続を起動してユーザーを認証する前に、接続値をプログラムで設定できます。この方法は通常、「MAFログイン接続の作成」ダイアログでカスタム・ヘッダー名を定義し、値は実行時に指定する場合に必要になります。接続の詳細をプログラムで構成するために、MAFアプリケーションでは、oracle.adfmf.framework.api.AdfmfJavaUtilitiesクラスのOverrideConnectionHandler APIを起動できます。このAPIは、現在の接続プロパティを新しい値でオーバーライドし、オーバーライドされた値でアプリケーションがログインを開始できます。

接続値をプログラムでオーバーライドするには、次の一般的なプロセスが必要です。

  1. オーバーライドするプロパティを定義するXML要素の名前をconnections.xmlファイルから取得する。

  2. 認証の前にオーバーライド値を取得する。たとえば、MAFアプリケーションでは、この目的のために、ユーザーに値の入力を要求するようにAMXページを定義できます。

  3. オーバーライド・メソッドを実装するマネージドBeanを起動し(接続プロパティのオーバーライドごとに1つ)、ゲッター・メソッドとセッター・メソッドを定義する。たとえば、AMXページの場合、ユーザーがコマンド・ボタンをクリックすると、そのユーザーの入力値がマネージドBean上で送信されます。

接続プロパティのオーバーライドを指定するには、connections.xmlファイルを調べて、次のXML要素の定義を取得します。

  • 接続参照名。たとえば、ConnWithCustomHeaderです。

  • オーバーライドする属性を定義するプロパティのXML要素名。たとえば、テナント・ドメイン名の伝播に使用されるスキームのmultiTenantSchemeです。

  • オーバーライドするプロパティの属性を定義するXMLサブ要素名。一意の接続プロパティの場合は、常にvalue要素になります。

注意:

カスタム・ヘッダー定義では、同じ要素名を使用して値を指定するため、カスタム・ヘッダーの場合は、XML要素headerおよびvalueを使用しないでください。かわりに、カスタム・ヘッダーにはContents、プロパティおよび属性にはcustomAuthHeadersを使用して、オーバーライド・メソッドにそれぞれ渡してください。

XML要素名の取得

たとえば、カスタム・ヘッダーの値をオーバーライドするには、次のconnections.xmlファイルで、接続名のConnWithCustomHeaderContents要素およびcustomAuthHeadersサブ要素(ヘッダー名/値のペアの定義)を渡します。

package mobile;

<References xmlns="http://xmlns.oracle.com/adf/jndi">
  <Reference name="ConnWithCustomHeader"
             className="oracle.adf.model.connection.adfmf.LoginConnection"
             adfCredentialStoreKey="ConnWithCustomHeader" partial="false"
             manageInOracleEnterpriseManager="true"
             deployable="true" xmlns="">
    <Factory className="oracle.adf.model.connection.adfmf.LoginConnectionFactory"/>
    <RefAddresses>
      <XmlRefAddr addrType="adfmfLogin">
        <Contents>
          ...
          <isMultiTenantAware value="true"/>
          <multiTenantScheme value="custom_header"/>
          <multiTenantHeaderName value="X-ID-TENANT-NAME"/>
          <customAuthHeaders>
            <header name="State" value="Georgia"/>
            <header name="City" value="Atlanta"/>
          </customAuthHeaders>
          ...
        </Contents>
      </XmlRefAddr>
    </RefAddresses>
  </Reference>

オーバーライド値の取得

実行時に接続値のオーバーライドを実行するために、MAFアプリケーションは、値および値を送信するコマンドボタンのプロンプトでAMXページを起動する、デフォルトの保護されていない機能で値を求める場合があります。次のサンプルは、マネージドBeanのオーバーライド・メソッドをトリガーするアクション・リスナーを定義するコマンドボタンを示しています。

<?xml version="1.0" encoding="UTF-8" ?>
<amx:view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xmlns:amx="http://xmlns.oracle.com/adf/mf/amx"
          xmlns:dvtm="http://xmlns.oracle.com/adf/mf/amx/dvt">
  <amx:panelPage id="pp1">
    <amx:facet name="header">
      <amx:outputText value="Home" id="ot1"/>
    </amx:facet>
    <amx:facet name="primary">
      <amx:commandButton id="cb1"/>
    </amx:facet>
    <amx:facet name="secondary">
      <amx:commandButton id="cb2"/>
    </amx:facet>
    <amx:inputText label="Name1" id="it1" value="#{applicationScope.OverrideBean.headerName1}"/>
    <amx:inputText label="Value1" id="it2" value="#{applicationScope.OverrideBean.headerValue1}"/>
    <amx:inputText label="Name2" id="it3" value="#{applicationScope.OverrideBean.headerName2}"/>
    <amx:inputText label="Value1" id="it4" value="#{applicationScope.OverrideBean.headerValue2}"/>
    <amx:inputText label="TenantHeader" id="it5"
                                           value="#{applicationScope.TestBean.tenantHeaderName}"/>
    <amx:inputText label="Scheme" id="it6" value="#{applicationScope.OverrideBean.scheme}"/>
    <amx:commandButton text="Override headers" id="cb3"
                               actionListener="#{OverrideBean.overrideAndGotoOverrideFeature}"/>
  </amx:panelPage>
</amx:view>

接続プロパティのオーバーライド

接続プロパティの値をプログラムでオーバーライドするために、マネージドBeanでは、接続プロパティのオーバーライドごとにオーバーライド・メソッドを実装します。次の例では、headers HashMapを作成してカスタム・ヘッダー値を渡します。他のプロパティの値(MultiTenantHeaderNameなど)は、connections.xml定義のXML要素によって一意に定義されるため、マップが必要になるのは、オーバーライドするカスタム・ヘッダーの場合のみです。

package mobile;
 
import oracle.adfmf.amx.event.ActionEvent;
import oracle.adfmf.framework.api.AdfmfJavaUtilities;
import oracle.adfmf.java.beans.PropertyChangeListener;
import oracle.adfmf.java.beans.PropertyChangeSupport;
 
import java.util.HashMap;

public class OverrideBean {
    
    private String headerName1 = "", headerName2 = "", headerValue1 = "", headerValue2 = "";
    private String tenantHeaderName = "";
    private String scheme = "";
 
    // Bean setter and getter methods omitted for brevity
    ...
    
    // Command button action listener invokes override method implementation
    public void overrideAndGotoOverrideFeature(ActionEvent e) {
        overrideAndGotoOverrideFeature();
    }
 
    // Override method implementation configures custom headers and other connection properties
    public void overrideAndGotoOverrideFeature()
    {
      AdfmfJavaUtilities.clearSecurityConfigOverrides("ConnWithCustomHeader");
      HashMap<String, String> headers = new HashMap<String, String>();
      headers.put(headerName1, headerValue1);
      headers.put(headerName2, headerValue2);
      AdfmfJavaUtilities.overrideConnectionProperty("ConnWithCustomHeader", "Contents",
                                                      "customAuthHeaders", headers);
      AdfmfJavaUtilities.overrideConnectionProperty("ConnWithCustomHeader",
                                                      "multiTenantHeaderName", "value", 
                                                      tenantHeaderName);
      AdfmfJavaUtilities.overrideConnectionProperty("ConnWithCustomHeader", "multiTenantScheme",
                                                      "value", scheme);
      AdfmfJavaUtilities.updateApplicationInformation(false);
      
    }
 
    public void addPropertyChangeListener(PropertyChangeListener l) {
        propertyChangeSupport.addPropertyChangeListener(l);
    }
 
    public void removePropertyChangeListener(PropertyChangeListener l) {
        propertyChangeSupport.removePropertyChangeListener(l);
    }
}

30.6 MAFアプリケーションのセキュリティの構成

maf-feature.xmlファイルとmaf-application.xmlファイルの概要エディタ、および「MAFログイン接続の作成」ダイアログを使用して、MAFアプリケーションのセキュリティを構成します。

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

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

アプリケーション機能のセキュリティは、maf-application.xml概要エディタの「セキュリティ」ページを使用して構成します。タスク内の手順に従って、アプリケーション機能のユーザー・アクセスを指定します。

セキュリティが適用されるように各アプリケーション機能を定義できます。セキュリティ構成は、maf-application.xmlの概要エディタの「セキュリティ」ページを使用して実行します。

図30-15に示されているmaf-feature.xml概要エディタでは、セキュリティを適用するアプリケーション機能を指定できます。

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

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

始める前に:

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

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

  1. ナビゲータのユーザー・インタフェース・プロジェクトで、「アプリケーション・ソース」および「META-INF」フォルダ・ノードを開いてから、maf-feature.xmlをダブルクリックします。
  2. maf-feature.xmlファイルの概要エディタで、「機能」表にリストされているアプリケーション機能を選択するか、または「追加」をクリックしてアプリケーション機能を追加します。
  3. ログインが必要なすべてのアプリケーション機能に「セキュリティ有効化」を選択します。

    ヒント:

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

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

アプリケーション機能にセキュリティを定義したら、maf-application.xml概要エディタの「セキュリティ」ページを使用して、ログイン・ページの構成、ログイン・サーバーへの接続の作成、およびセキュリティが有効化されたアプリケーション機能への接続の割当てを実行します。タスク内の手順に従って、ログイン・ページを指定します。

アプリケーション機能のセキュリティを指定したら、図30-16に示されているmaf-application.xml概要エディタの「セキュリティ」ページを使用して、セキュリティが適用される各アプリケーション機能に対して、ログイン・ページの構成およびログイン・サーバーへの接続の作成と割当てを行います。このページにリストされているすべてのアプリケーション機能は、maf-feature.xmlファイルで、セキュリティが必要なものとして指定されています。

通常、アプリケーション機能のグループは、同じログイン・サーバー接続で保護され、ユーザーは、MAFから再度ログインを求められることなく、これらのアプリケーションをどれでも開くことが可能です。ただし、場合によっては、あるアプリケーション機能のセットを保護しているログイン・サーバーと、別のアプリケーション機能のセットを保護しているログイン・サーバーが異なるため、アプリケーション機能で要求される資格証明がそれぞれ異なる可能性があります。このような状況に対応するために、MAFアプリケーション用のログイン・サーバーへの接続をいくつも定義できます。maf-application.xmlファイルでは、機能参照に関連付けられている認証サーバー接続は、次のようにloginConnRefId属性を使用して指定されます。

<adfmf:featureReference refId="feature1" loginConnRefId="BasicAuthentication"/>
<adfmf:featureReference refId="feature2" loginConnRefId="WebSSO"/>

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

注意:

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

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

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

始める前に:

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

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

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

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

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

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

  1. ナビゲータで、「アプリケーション・リソース」パネルを開き、「ディスクリプタ」および「ADF META-INF」フォルダ・ノードを開いて、maf-application.xmlをダブルクリックします。
  2. maf-application.xmlファイルの概要エディタで、「セキュリティ」ナビゲーション・タブをクリックします。
  3. 「セキュリティ」ページで、ログイン・ページのタイプを指定します。
    • ユーザー名およびパスワードを受け入れるビューとして、「ログイン・ページ」を選択します。

  4. 次のように、選択したログイン・ページのコンテンツ(またはユーザー・インタフェース)を選択します。
    • デフォルト: 選択されたすべての埋込みアプリケーション機能で使用されるデフォルト・ログイン・ページ。「デフォルト・ログイン・ページ」を参照してください。デフォルトのログイン・ページは、MAFによって提供されます。

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

      ヒント:

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

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

デフォルトのログイン・ページadf.login.htmlと、MAFのデプロイメントによってwwwディレクトリに生成されるアーティファクトを変更することで、カスタム・ログイン・ページを作成します。タスク内の手順に従って、カスタム・ログイン・ページを作成し、その場所を取得します。

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

始める前に:

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

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

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

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

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

  1. デフォルト・ログイン・ページを、ユーザー・インタフェース・プロジェクトのpublic_htmlディレクトリ(JDeveloper\mywork\application name\ApplicationController\public_htmlなど)内にコピーします。
  2. ログイン・ページの名前を変更します。
  3. ページを更新します。
  4. maf-application.xmlファイルの概要エディタの「セキュリティ」ページで、「カスタム」を選択し、「参照」をクリックしてログイン・ページの場所を検索します。

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

MAFに登録した機能がアクティブ化されると、ログイン・プロセスが実行されます。認証の成功時に、ログイン・ページは指定された宛先を取得して、その宛先に移動します。

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

組込みCordovaサポートを使用して、ログイン・ページからリソース・バンドルなどのJavaクラスまたはリソースを使用する場合は、ApplicationControllerプロジェクトにこれらのクラスおよびリソースを配置する必要があります。

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

MAFが提示するデフォルトのログイン・ページは、HTMLで記述されたクロス・プラットフォームのページです。このページには、資格証明用のフィールドが含まれています。

MAFによって提供されるデフォルトのログイン・ページは、ログイン・ボタンと、ユーザー名とパスワード用の入力テキスト・フィールド、マルチテナント名(オプション)、およびエラー・メッセージ・セクションから構成されます。これは、HTMLで記述されたクロス・プラットフォーム・ページです。図30-18は、デザインタイムでマルチテナント対応オプションを有効にしたデフォルトのログイン・ページを示し、このページでは、ユーザー名とパスワードの他、テナントのドメイン名の入力が要求されます。

図30-18 マルチテナント・ドメイン・フィールドを備えたデフォルトのログイン・ページ

この図の説明は周辺の本文にあります。

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

カスタム・ログイン・ページには、デフォルトのログイン・ページと同じ認証メカニズムとナビゲーション・コントロールが含まれています。カスタム・ログイン・ページが追加されると、JDeveloperは<adfmf:login>要素を追加して、その子要素の<adfmf:LocalHTML>を移入します。

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

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

カスタム・ログイン・ページはHTMLで記述されています。ログイン・ページのフィールドには、具体的に定義された<input>要素および<label>要素を含める必要があります。

ヒント:

カスタム・ログイン・ページを作成するためのガイドとしてMAFアプリケーションのデプロイ時に生成されたデフォルトのログイン・ページを使用します。「カスタム・ログインHTMLページの作成方法」で説明されているように、wwwディレクトリ内のログイン・ページにアクセスするには、MAFアプリケーションをデプロイした後、deployディレクトリに移動します。

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

<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"/>

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

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


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

ページ要素 ID

ユーザー名フィールド

oracle_access_user_id

パスワード・フィールド

oracle_access_pwd_id

ログイン・ボタン

oracle_access_submit_id

取消ボタン

oracle_access_cancel_id

「Identityドメイン」/「テナント名」フィールド

oracle_access_iddomain_id

エラー・フィールド

oracle_access_error_id

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

oracle_access_auto_login_id

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

oracle_access_remember_credentials_id

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

oracle_access_remember_username_id


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


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

ボタン JavaScript

ログイン・ボタン

oracle_access_sendParams(this.id)

取消ボタン

oracle_access_sendParams(this.id)


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

セキュリティが有効化されたアプリケーションごとに、JDeveloperは、対応する機能参照を「セキュリティが有効な機能」表に追加します。

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

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

第30.7項 デバイス機能へのアクセスの許可

MAFには、デバイスの機能へのアクセスを定義する、Cordovaのコア・プラグインのセットが用意されています。これらのプラグインと追加のプラグインの登録によって、デバイス・アクセスに要求される権限を有効にできます。

デバイス機能へのアクセスは、MAFアプリケーションに組み込まれているCordovaプラグインによって定義されます。コア・プラグインのセットはMAFによって提供されます。これらのプラグインの1つを有効にすると、そのアプリケーションに必要なすべてのデバイス・アクセス権限が有効になります。MAFアプリケーションに組み込まれている他のCordovaプラグインも、必要なデバイス・アクセス権限を有効にします。

MAFアプリケーションの大多数ではネットワーク・アクセスが必要なため、ネットワークにアクセスする権限はデフォルトで有効になっています(デフォルトで有効になっている唯一のデバイス機能)。

  • ネットワーク情報: アプリケーションによるネットワーク・ソケットのオープンを許可します。少なくとも1つのデバイス機能のセキュリティが有効な場合、ネットワーク・アクセス機能は有効にしておく必要があります。

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

MAFアプリケーションのCordovaプラグインの詳細は、「MAFアプリケーションでのプラグインの使用方法」を参照してください。

MAFアプリケーション内の選択したアプリケーション機能がネイティブ・コンテナにアクセスすること、および拡張機能によってMAFアプリケーションがデバイス機能にアクセスすることを防止できます。たとえば、自分のMAFアプリケーションに、リモート・コンテンツを参照する、信頼できないWebアプリケーションからのアプリケーション機能が含まれているとします(リモートURLコンテンツのアプリケーション機能)。このシナリオでは、次の例に示すように、この特定のアプリケーション機能がネイティブ・コンテナにアクセスすることを防止します。

<adfmf:featureReference refId="remoteAppfeature1" id="fr1" allowNativeAccess="false"/>

allowNativeAccessプロパティのデフォルト値はtrueです。

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

保護されたコンテンツを含むアプリケーション機能からログアウトしたユーザーは、引き続き匿名ユーザーとして保護されていないコンテンツと機能にアクセスできます。MAFは、1つのアプリケーションへの同一のIDまたは異なるIDを使用した複数のログインを許可します。

ユーザーが、保護されているコンテンツを含むアプリケーション機能からログアウトするとき、または制約によって制限されているときは、MAFはアプリケーション機能を終了せず、またユーザーはアプリケーション内でログイン状態を維持し、セキュアでないコンテンツおよび機能に匿名ユーザーとしてアクセスできます。MAFでは、制約を再初期化できるため、ユーザーは、同じアイデンティティを使用して、アプリケーションに繰り返しログインできます。また、MAFは、ユーザーに別のアイデンティティを使用したログインを許可することで、複数のアイデンティティでアクセスを共有できます。

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

これらのメソッドでは、次のような操作を実行できます。

  • アプリケーション機能からログアウトし、保護されていないコンテンツへのアクセスを継続します(つまり、MAFはアプリケーションを終了しません)。

  • アプリケーション内で、保護されている内容やUIコンポーネントを使用するためにログイン・サーバーで認証します。

  • MAFアプリケーションまたはアプリケーション機能からログアウトし、別のアイデンティティを使用して再びログインします。

  • MAFアプリケーションまたはアプリケーション機能からログアウトし、ロールと権限が更新された同じアイデンティティを使用して再びログインします。

現在の認証サーバーからログアウトできるようにするには、次のように、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 Mobile Application Framework Java APIリファレンスを参照してください。

30.9 MAF認証APIの使用方法

MAFには、APIが含まれた様々な認証クラスが用意されており、MAFアプリケーションで認証関連のタスクを行う場合に役立ちます。

これらのAPIは、oracle.maf.api.authenticationパッケージの認証クラスに存在します。たとえば、AuthenticationHandlerクラス、AuthenticationPlatformクラス、AuthenticationUtilityクラスなどがあります。

これらのAPIを実装して実行できるタスクには、ログイン中のユーザーが保護されたアプリケーションにアクセスする前に行う処理などがあります。たとえば、認可ヘッダー情報を取得し、その情報を使用して、エンド・ユーザーがログイン成功時に移動するコンテンツを決定します。AuthenticationPlatformは、エンド・ユーザーが保護されたアプリケーション機能からログアウトしたときになんらかの処理を実行するために実装できるaddLogoutCallback APIも提供します。このコールバックAPIを使用すると、エンド・ユーザーがデバイスを共有しているシナリオで役立つ場合があります。これらの認証クラスの詳細は、Oracle Mobile Application Framework Java APIリファレンスを参照してください。

次の例は、実装クラスからのコードのスニペットを示しており、AuthenticationPlatformのインスタンスはそのgetToken() APIを使用して認可ヘッダー情報を取得します。

例30-1 認証プラットフォームからの認可ヘッダーの取得

import oracle.maf.api.authentication.AuthenticationPlatform;
import oracle.maf.api.authentication.AuthenticationUtility;
…
AuthenticationPlatform ap = AuthenticationUtility.getInstance().lookupByCredentialStoreKey("credentialStoreKey");
String authorization = ap.getToken("Authorization");
…

30.10 SSL用の自己署名証明書を使用するサーバーにアクセスするための証明書の作成

MAFのcacertsファイルにより、信頼できるソースからの証明書を識別することでデプロイメントが可能になります。タスク内の手順に従って、MAFのcacertsファイルにプライベート証明書を追加します。この手順は、自己署名証明書を使用しているサーバーのリソースにアプリケーションがアクセスする必要がある場合や、アプリケーションがカスタムの証明書を必要とする場合に実行します。

MAFは、cacerts証明書ファイル(HTTPSハンドシェークのためのクライアント・アプリケーションおよびサーバー間のJavaメカニズム)を提供します。JDeveloperは、アプリケーション・リソースのSecurityフォルダ内にこのファイルを作成します(JDeveloper\mywork\application name\resources\Security\cacerts にあります)。MAFのcacertsファイルにより、信頼できる既知のソースからの一連の証明書がJVMに対して識別され、デプロイメントが可能になります。

サーバーが自己署名証明書を使用しているサーバー・リソースにアプリケーションがアクセスする必要がある場合は、プライベート証明書をMAFのcacertsファイルに追加する必要があります。アプリケーションでカスタム証明書が必要な場合(RSA暗号化が使用されていない場合など)も、プライベート証明書を追加する必要があります。アプリケーションをデプロイする前に、プライベート証明書を追加します。MAFアプリケーションのユーザーは、「MAFアプリケーションでのSSL証明書のファイル拡張子の登録」で説明するように、証明書のインストールを容易にするようアプリケーションを構成してある場合に証明書をインストールできます。

始める前に:

cacertsファイルの内容を理解しておくと役立ちます。『Oracle Mobile Application Frameworkのインストール』のMAFの新しいSSL用cacertsファイルへの移行に関する項を参照してください。

JDeveloperによるcacertsファイルの作成方法についても理解しておくと役立ちます。「アプリケーション・コントローラ・プロジェクト・レベルのリソースについて」を参照してください。

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ファイルに証明書を追加します。次の例は、new_certというcacertsファイルへの単一の資格証明の追加を示しています。

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

      各証明書に対して同じ手順を繰り返します。表30-4は、keytoolのオプションを示しています。


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

      オプション 説明

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

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

    注意:

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

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

30.11 MAFアプリケーションでのSSL証明書のファイル拡張子の登録

タスク内の手順に従って、アプリケーションの証明書ファイルの拡張子を登録し、双方向のSSL通信を有効にします。登録後、ユーザーは実行時に証明書をダウンロードして、その証明書をアプリケーションのキーストアに抽出してインストールします。

MAFでは、サーバーSSL証明書およびクライアントSSL証明書の両方のファイル拡張子の登録がサポートされています。ユーザーは、証明書をインストールした後に、MAFアプリケーションの再起動が必要になることがあります。

サーバーSSL証明書の拡張子

サーバーSSL証明書によって、MAFアプリケーションが接続するリモートHTTPSサーバーが識別されます。サーバーSSL証明書のファイル拡張子を登録して、MAFアプリケーションの作成時にMAFによって提供されるcacertsファイル内にない証明書のインストールを容易にします。このシナリオは、MAFアプリケーションが接続するHTTPSサーバーで、ルート認証局で発行された証明書ではなく自己署名による証明書が使用される場合によく起こります。MAFでは、現在、AndroidプラットフォームとiOSプラットフォームにデプロイされたMAFアプリケーションでのサーバーSSL証明書のインストールがサポートされています。これは、ユニバーサルWindowsプラットフォームにデプロイされたMAFアプリケーションではサポートされていません。このプラットフォームの場合は、SSL用の自己署名証明書を使用するサーバーにアクセスするための証明書の作成で説明するように、証明書をMAFアプリケーションのcacertsファイルに追加します。

クライアントSSL証明書の拡張子

クライアント証明書は、リモート・サーバーに対してMAFアプリケーションを識別します。ユーザーに、クライアント証明書をMAFアプリケーションのキーストアにインストールして、双方向SSL、相互認証または双方向認証として知られるプロセスを使用して認証することを可能にする場合に、クライアントSSL証明書の拡張子を登録します。ユーザーがクライアント証明書をインストールすると、MAFアプリケーションはその証明書をサーバーに提示できるため、双方向SSL通信セッションによりクライアントとサーバー間の認証が実行されます。

iOSプラットフォームでは、サード・パーティ製アプリケーションがクライアント証明書のデフォルトの拡張子(.p12)を使用してファイルを開くことが許可されていません。この制限を回避するために、アプリケーション開発者は別の証明書拡張子(.certなど)を登録する必要があります。証明書を配布する管理者は、別の拡張子を使用するようにクライアント証明書の名前を変更して、MAFアプリケーションのユーザーが電子メール添付ファイル、またはクライアント証明書の配布に使用するURLから直接クライアント証明書を開くことができるようにします。

SSL証明書のファイル拡張子の登録方法

証明書のファイル拡張子をアプリケーションに登録するには、maf-application.xmlファイルの概要エディタの「アプリケーション」ページの適切なフィールド(ユース・ケースによって異なる)にそのファイル拡張子を入力します。

双方向SSLを有効にするためにMAFアプリケーションを構成するには:

  1. 「アプリケーション」ウィンドウで、「アプリケーション・リソース」パネルを展開します。

  2. 「アプリケーション・リソース」パネルで「ディスクリプタ」を展開し、「ADF META-INF」を展開します。

  3. maf-application.xmlファイルをダブルクリックし、表示される概要エディタで「アプリケーション」ナビゲーション・タブをクリックします。

  4. 「アプリケーション」ページで、適切なオプションを選択します。

    • 双方向SSLセッションでの使用のためのクライアント証明書のインストールを容易にする場合は、「クライアントSSL証明書の拡張」フィールドにファイル拡張子を入力します。

    • MAFアプリケーションでHTTPSサーバーへの接続に使用される、サーバー証明書のインストールを容易にする場合は、「サーバーSSL証明書の拡張」フィールドにファイル拡張子を入力します。

SSL証明書のファイル拡張子の登録時に起こること

入力フィールドに入力した値がJDeveloperによってmaf-application.xmlファイルに書き込まれます(例30-2を参照)。

実行時に、ユーザーは、証明書を管理者が配置した場所からデバイスにダウンロードするか、または電子メール添付ファイルから自動的に開きます。サーバーの場所からのダウンロード動作は、ユーザーのデバイスのオペレーティング・システムによって異なります。たとえば、Androidデバイスを使用するMAFアプリケーション・エンド・ユーザーは、証明書をAndroidのDownloadディレクトリにダウンロードします。ダウンロードすると、ユーザーはMAFアプリケーションのキーストアにインストールするために証明書を抽出します(開きます)。クライアント証明書についてこのステップを完了するには、ユーザーは、クライアント証明書を配布した管理者が提供したパスワードを入力する必要があります。ユーザーがアプリケーションのキーストアに証明書をインストールすると、MAFアプリケーションはその証明書をサーバーに提示して、双方向SSLセッションを確立できます。ユーザーがインストールしたサーバー証明書は、HTTPSサーバーとのSSLセッションを確立するためにMAFで使用できます。

例30-2 maf-application.xmlファイルでの証明書ファイル拡張子

<adfmf:application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:adfmf="http://xmlns.oracle.com/adf/mf"
                   version="1.0" name="ssltest" id="com.company.ssltest"
                   appControllerFolder="ApplicationController" listener-class="application.LifeCycleListenerImpl"
                   client-ssl-certificate-extension="clientcert"
                   server-ssl-certificate-extension="servercert">
                  ….