クロスドメイン ライブラリを使用する SharePoint アドインを作成する
低信頼承認システムと高信頼承認システムのいずれも SharePoint アドインで使用できないか、アドインが SharePoint リソースへの承認を得る唯一の手段としてふさわしい選択ではないシナリオがいくつかあります。
例:
SharePoint アドインのリモート コンポーネントがオンプレミスではなく、企業のファイアウォールが SharePoint と ACS のサーバー間通信をブロックしているため、低信頼システムを使用することができない。
SharePoint アドインが、SharePoint でのデータ処理にクライアント側の JavaScript に依存する単一ページの Web アプリケーションとして設計されている。
SharePoint アドインは、主にサーバー間の呼び出しに依存して、SharePoint のデータにアクセスします (また、低信頼システムまたは高信頼システムによって承認されます) が、いくつかの JavaScript 呼び出しによって補足する必要があります。 たとえば、グラフィックの負荷が高いページで表示されるデータに小さな更新を行うには、JavaScript を使用することにより、ページ全体の再読み込みなしで行うことができます。
ただし、セキュリティのために、ブラウザーはあるドメインにホストされている JavaScript が別のドメインのリソースにアクセスすることを許可しないため、リモートの JavaScript が SharePoint のリソースにアクセスするには、特別なテクニックが必要です。 SharePoint クロスドメイン JavaScript ライブラリを使用すると、リモート Web アプリケーションでこのテクニックを簡単に使用できるようになります。
注:
クロスドメイン ライブラリは、データを逆方向でアクセスできるようにする場合にも使用されます。つまり、SharePoint ページの JavaScript がリモート ドメインのデータにアクセスできるようにします。 詳細については、「SharePoint ページからのリモート データへのアクセス」を参照してください。
クロスドメイン ライブラリのアーキテクチャを理解する
SharePoint クロスドメイン ライブラリは、すべての SharePoint Web サイトの /_layouts/15/ 仮想フォルダーに配置される SP.RequestExecutor.js ファイルに含まれています。 このファイルのスクリプトは、ブラウザーのクロスドメイン スクリプトに関する制限を解消するために、既知の安全なテクニックをカプセル化します。iFrame は、iFrame のページが別のドメイン内にある場合でも、window.postMessage()
関数を使用して親ページと通信できます。 このため、データの要求と応答は、postMessage()
への呼び出しを使用することで、ドメインの境界を越えて渡されます。
警告
postMessage()
関数は HTML 5 をサポートするブラウザーでのみ動作するため、クロスドメイン ライブラリを使用する SharePoint アドインは、より古いブラウザーでは動作しません。
SharePoint では、クロスドメイン ライブラリはリモート Web アプリケーションのページに読み込まれ、そのページに SharePoint ドメインから特別なプロキシ ページをホストする非表示の iFrame を作成します。 プロキシ ページはすべての SharePoint Web サイトに既に存在します。
ライブラリは、SharePoint の REST API への CRUD 呼び出しを行うために必要な情報が含まれる JavaScript Object Notation (JSON) オブジェクトの作成のために使用されます。 JSON オブジェクトは、 を使用 postMessage()
してプロキシ ページに渡されます。 プロキシ ページではライブラリも読み込まれ、JSON オブジェクトは SharePoint への REST 呼び出しとして解析されて再構築されます。 プロキシ ページは SharePoint ドメインにあるため、ブラウザーで呼び出しが許可されます。
もちろんそれでも、SharePoint アドインのリモート コンポーネントには、SharePoint リソースに対して承認されたアクセス権が必要です。 そのためには、次の 2 つの方法があります。
アドイン マニフェストで、アドインのプリンシパルの種類を RemoteWebApplication (プロバイダー向けのホスト型アドインの既定) に設定します。 アドインが ACS に登録されるとき、その登録にはリモート Web アプリケーションのドメインが含まれます。 サーバー側の低信頼システムの一部であるトークン渡しのフローを全く使用していない (このシナリオでそうであるように) 場合でも、SharePoint は ACS に登録されたドメインを信頼します。 アドイン登録の詳細については、「SharePoint アドインを登録する」を参照してください。
SharePoint ホスト型アドインでは、アドインのプリンシパルの種類を既定の Internal に設定したままにできます。 その後、Internal 要素の AllowedRemoteHostUrl 属性を、次の例に示すようにリモート Web アプリケーションの URL に設定します。
<AppPrincipal>
<Internal AllowedRemoteHostUrl="https://example.com/Home.html" />
</AppPrincipal>
注:
2 番目のオプション (Internal のアドイン プリンシパル) を使用する場合、JavaScript とクロスドメイン ライブラリのみを使用して、SharePoint にアクセスできます。 SharePoint クライアント オブジェクト モデルは、Internal の SharePoint アドインではブロックされるため、クロスドメイン ライブラリと、低信頼システムまたは高信頼システムのいずれかを使用するデュアル承認システムを持つことはできません。
ライブラリを使用する方法の詳細については、「クロスドメイン ライブラリを使用してアドインから SharePoint のデータにアクセスする」を参照してください。
SharePoint ページからリモート データにアクセスする
SharePoint クロスドメイン ライブラリは逆方向でも使用できます。つまり、SharePoint ページの JavaScript がライブラリを使用して、アドインのリモート コンポーネントからのデータを取得できます。 そのためには、クロスドメイン アーキテクチャを逆にして、リモート Web アプリケーションでプロキシ ページを作成します。 ライブラリは、プロキシ ページをホストするために iFrame を作成する SharePoint ページから呼び出されます。
この方法でライブラリを使用する方法の詳細については、「SharePoint のクロスドメイン ライブラリのカスタム プロキシ ページを作成する」を参照してください。