40 Oracle Sales Cloud内のIFrameへのアプリケーションの埋込み可能化
この機能を活用するために、開発者は、アプリケーション・コンポーザを使用して、カスタム・コンテンツが含まれるカスタム・タブを作成します。ユーザーがサブタブをクリックする実行時には、外部アプリケーションからコンテンツが取り込まれ、専用のIFrameに埋め込まれます。
セキュリティに関する主な懸念事項について検討した後、Oracle Sales Cloud内のIFrameにアプリケーションを埋込み可能にする方法について学習します。
前提条件
このタスクを完了する前に、次の各事項について検討してください。
- 正しいバージョンのOracle JDeveloper IDEがインストールされていることを確認してください。
注意:
Oracle JDeveloper IDEを使用してOracle Cloudで開発するには、Oracle JDeveloper Studio Editionバージョン11.1.1.7.1を使用する必要があります。これより新しいバージョンを含む他のOracle JDeveloperのバージョンの場合、Oracle Cloudの統合機能をサポートしていません。Oracle JDeveloper Studio Edition 11.1.1.7.1をOracle Technology Network (http://www.oracle.com/technetwork/developer-tools/jdev/downloads/jdeveloer111171-2183166.html)からダウンロードしてください。
検討ポイント
Oracle Sales Cloudのサブタブ拡張性機能を使用して計画する場合、セキュリティに関して検討すべき重要な考慮事項があります。
クリックジャッキング攻撃を回避するために、アプリケーションの多くは、iFrameへの埋込み時には実行されないよう設計されています。一部のアプリケーションでそれ自体の埋込みが可能なのは、特定の「安全」状況下にある場合のみです。たとえば、コンテナ・アプリケーションが同じオリジン・ドメインに属する場合などです。したがって、基本的な設計上の課題は、クリックジャッキング攻撃に対する防御を解消または無効化せずにアプリケーションの埋込みを可能にすることにあります。
HTTP
ヘッダー・オプション(X-FRAME-OPTIONS
やFRAME-ANCESTORS
など)に対するブラウザのサポートは、安全な埋込みに関する部分的または全体的なソリューションとなり得る可能性があります。ただし、すべてのブラウザがこれらのヘッダー・オプションをサポートしているわけではなく、準拠したブラウザをすべてのユーザーが使用できることを保証することは不可能です。汎用ソリューションが必要である場合、安全なアプローチは、特に公に対するアプリケーションの場合にブラウザのサポートに頼らないことです。
IFrameへのADFアプリケーションの埋込み
Oracle Application Development Framework (ADF)を使用して構築されたアプリケーションの場合、カスタム・サブタブIFrame内に外部アプリケーションを安全にレンダリングできる統合メカニズムが採用されています。
IFrameへの非ADFアプリケーションの埋込み
埋込みIFrameが最初にレンダリングされる場合、コンテナ・アプリケーション(Oracle Sales Cloud)からメッセージを受信しますが、これは、埋込みアプリケーション・ページ・コンテンツの初期表示状態が非表示に設定されている場合のみです。 アプリケーションは、このメッセージの受信時にトリガーされるJavaScriptメッセージ・ハンドラ関数を登録できます。 これにより、このメッセージに対するレスポンスで、コンテンツ・スタイルが非表示から表示に変更されます。 また、たとえば、オリジン・ドメインの検証などを目的として、メッセージ・ハンドラ関数に別のロジックを追加することもできます。
ページ内でメッセージ・ハンドラを設計する方法を示すコード・スニペットを次に示します。 ページ・スタイルは最初、非表示に設定されています。 JavaScriptによってメッセージ・イベント・ハンドラ関数が登録され、“_adfShowBody”メッセージをコンテナ・アプリケーションから受信したときにこの関数によって非表示スタイルが削除されますが、これは、オリジン・チェックに合格した場合のみです。
>HTML< >HEAD< >STYLE< Body {display:none;} ...>/STYLE< >SCRIPT TYPE="text/javascript"< function messageHandler(event) { if (event.data.message == “_adfShowBody”) { if (isAllowedOrigin(event.origin)) { removeFrameBusting(); } } } function isAllowedOrigin(origin) { if (origin == “http://www.oracle.com” || origin == “http://www.oraclecloud.com”) return true; else return false; } function removeFrameBusting() { var styleNode = document.getElementsByTagName("style")[0]; styleNode.parentNode.removeChild(styleNode); if (window == top) { removeFrameBusting(); } else { if (window.addEventListener) { window.addEventListener(“message”, messageHandler, false); } else { ...} } ......>/SCRIPT< >/HEAD< >BODY< ...>/BODY< >/HTML<