SharePoint アドインのセキュリティで保護されたデータ アクセスとクライアント オブジェクト モデル
SharePoint アドインのデータ アクセス オプションを評価する際は、アドインの環境を評価し、クライアントとサーバー間の通信、必要なタスクをアドインが実行するために必要なアクセス許可レベルなどのいくつかの要素を考慮する必要があります。 また、SharePoint アドイン用のモデルで使用可能な API についても評価する必要があります。
SharePoint アドイン内のデータの概要
データの照会、格納、または操作を必要としない SharePoint アドインを想像することは簡単ではありません (これは、どのようなアドインにも当てはまります)。 アドインでは、多くの場合、ドキュメント ライブラリやリストに含まれるアイテム、メタデータ、ユーザー プロファイルなどの SharePoint データを取得して操作することが必要になります。 同様に、アドインで外部データにアクセスする必要があるシナリオも考えられます。 SharePoint アドインのモデルには、SharePoint および外部システムに存在するデータとサービスにアクセスするために使用できる複数の接続オプションと豊富な API のセットがあります。
アドインを設計しているときにデータ アクセスの計画を立てる際には、次の 2 つの重要な決定を下す必要があります。
- どの接続オプションを使用すべきか。
- 必要なデータへのアクセスにどの API を使用すべきか。
以下の図では、SharePoint アドイン用のモデル で提供されているさまざまなオプションをまとめています。以降のセクションで、各オプションの詳細と、どのような場合にそれらを使用するかを示します。
図 1 は、アドインから SharePoint データにアクセスする場合のオプションを示しています。 このようなシナリオを扱うときには、SharePoint に対する認証と通信に、(1) OAuth と (2) クロスドメイン ライブラリのどちらを使用するかを決定する必要があります。 データ アクセス API については、(3) クライアント オブジェクト モデル (JavaScript/.NET クライアント オブジェクト モデル) と (4) Representational State Transfer (REST) のどちらにするかを決定する必要があります。
特定のデータにアクセスするために (5) リモート イベント レシーバーを使用することもできますが、リモート イベント レシーバーの主なシナリオはリモートのコードの実行であることに注意してください。
図 1. アドインで SharePoint データを使用するためのオプション
図 2 は、アドインで外部データにアクセスする場合のオプションを示しています。 このようなシナリオを扱うときには、外部サービスまたはシステムとの認証と通信に、(1) Web プロキシ、(2) 外部コンテンツ タイプ、または (3) クロスドメイン ライブラリとカスタム プロキシ ページのうち、どれを使用するかを決定する必要があります。 さらに、(4) クライアント オブジェクト モデル (JavaScript/.NET クライアント オブジェクト モデル) または (5) Representational State Transfer (REST) も使用できます。
図 2. アドインで外部データを使用するためのオプション
SharePoint アドインのデータ接続オプション
アドインでデータを操作するときには、いくつかの側面を考慮する必要があります。 たとえば、データはどのルートを使用するのか、 サーバーから到着するのか、サーバーを経由するのか、 クライアントを経由するのか、 サインインしているユーザーとして認証しても問題ないのか、 アドインには昇格された権限が必要なのか、について考慮する必要があります。 次からの各セクションでは、このような疑問点の解決に役立つ説明を示します。
SharePoint データの場合の接続
SharePoint データにアクセスするときには、次の接続オプションを使用できます (図 1 を参照)。
OAuth: 単純で標準的な方法で安全な承認が可能になるオープン プロトコルです。 OAuth を使用することで、ユーザーは自分のユーザー名とパスワードを共有することなく、アプリケーションがユーザーの代わりに動作することを承認できます。 OAuth はサーバー側コードと併用できます。 これは、非対話型のプロセスを実行する必要がある場合や、サインインしているユーザーの権限よりも高い権限に昇格する必要がある場合に適したオプションです。 OAuth の詳細については、「SharePoint アドインの承認と認証」を参照してください。
Cross-domain library: JavaScript ファイル (SP.RequestExecutor.js) 形式のクライアント側の代替手段です。このファイルは、リモート アドインで参照できる SharePoint Web サイトでホストされます。 クロスドメイン ライブラリを使用すると、プロキシ経由でリモート アドイン ページ内の複数のドメインとの対話型操作が可能になります。 これは、サーバーではなくクライアントでアドイン コードを実行する場合や、SharePoint とリモート インフラストラクチャの間にファイアウォールなどの接続の遮蔽物がある場合に適したオプションです。 詳細については、「クロスドメイン ライブラリを使用してアドインから SharePoint のデータにアクセスする」を参照してください。
リモート イベント レシーバー: リモート イベント レシーバーを使用すると、アドイン内のアイテム (リスト、リスト アイテム、Web など) に対して発生するイベントを処理できます。 こうしたイベントは、従来の SharePoint ソリューションのイベントに似ていますが、SharePoint アドインのリモート コンポーネントで処理できる点が異なります。 アイテムの一部のプロパティは、リモート イベント レシーバーで利用できる点に注目してください。 詳細については、「SharePoint アドインでリモート イベント レシーバーを作成する」を参照してください。同様に、アドインのイベント レシーバーを使用すると、アドインのインストール、更新、およびアンインストールの方法をカスタマイズできます。 詳細については、「SharePoint アドインでアドイン イベント レシーバーを作成する」を参照してください。
SharePoint データ接続オプション: どれを使うべきか
以下の表は、アドインの作成中に発生する可能性のある一般的な要件とシナリオを示しています。列内の ○ は、各ケースで使用できるオプションを示しています。
表 1. SharePoint データ接続オプション
要件/シナリオ | OAuth | クロスドメイン ライブラリ |
---|---|---|
クライアント側の技術 (HTML + JavaScript) を使用します。 | x | |
REST インターフェイスを使用する。 | x | x |
SharePoint とリモート アドインの間にファイアウォールがあり、 ブラウザー経由で呼び出しを発行する必要がある。 |
x | |
アドインでサインインしているユーザーとしてリソースにアクセスする必要がある。 | x | x |
アドインで現在サインインしているユーザーの権限レベルとは 異なるレベルに権限を昇格する必要がある。 |
x | |
サインインしているユーザーとは異なるユーザーの代わりにアドインが動作する必要がある。 | x | |
ユーザーがサインインしている間のみアドインが処理を実行する必要がある。 | x | x |
ユーザーがサインインしていないときにもアドインが処理を実行する必要がある。 | x | |
リモート コードを SharePoint のイベントに対する応答としてアドインが実行する必要がある。 |
リモート イベント レシーバーは OAuth の上に構築されているため、この表の比較によって使用するかどうかを決定することは最適な方法ではありません。 リモート イベント レシーバーは、データ交換だけでなくリモート コードの実行も必要になる場合に使用します。
外部データの場合の接続
外部データにアクセスするときに次の接続オプションが使用できます (図 2 を参照)。
Web プロキシ: 開発者は、JSOM などのクライアント API で公開されている Web プロキシを使用できます。 Web プロキシを使用する場合は、SharePoint に最初の要求を発行します。 そうすると、指定されたエンドポイントに対して SharePoint がデータを要求し、応答をページに転送します。 サーバー レベルで通信を行う場合は、Web プロキシを使用します。 Web プロキシは認証を必要としない非構造化データへのアクセスを目的として設計されています。 詳しくは、「 SharePoint で Web プロキシを使用してリモート サービスのクエリを実行する」をご覧ください。
外部コンテンツ タイプ: テナント管理者の関与なしに SAP、Netflix からの外部データ、および独自仕様やその他の種類のデータにアクセスするアドインを作成できます。 外部アプリケーションへのアクセスは Business Connectivity Services (BCS) によって管理され、他の SharePoint アプリケーションから使用できる統一された一貫性のあるインターフェイスが提供されます。 アプリを対象範囲とする ECT は、BCS モデルを使用しているときに、認証が必要なデータにアクセスする際に適切なオプションです。 詳細については、「アドイン スコープの外部コンテンツ タイプ (SharePoint)」を参照してください。
クロスドメイン ライブラリ用のカスタム プロキシ ページ: リモート アドイン インフラストラクチャでホストされるカスタム プロキシ ページを提供すると、クロスドメイン ライブラリを使用してリモート アドイン上のデータにアクセスできます。 開発者は、カスタム プロキシ ページを実装する責任を負い、リモート アドインに対する認証メカニズムなどのカスタム ロジックを提供する必要があります。 クライアント レベルで通信を行う場合は、クロスドメイン ライブラリとカスタム プロキシ ページを使用します。 詳細については、「 SharePoint のクロスドメイン ライブラリのカスタム プロキシ ページを作成する」をご覧ください。
外部データ接続オプション: どれを使うべきか。
以下の表は、アドインの作成中に発生する可能性のある一般的な要件とシナリオを示しています。列内の ○ は、各ケースで使用できるオプションを示しています。
表 2. 外部データの場合の接続オプション
要件/シナリオ | Web プロキシ | 外部コンテンツ タイプ | カスタム プロキシ ページを含むクロスドメイン ライブラリ |
---|---|---|---|
クライアント側の技術 (HTML + JavaScript) を使用します。 | x | x | x |
リモート アドインまたはサービスにページまたはコンポーネントを追加できない。 | x | x | |
REST インターフェイスを使用する。 | x | x | x |
JavaScript CSOM を使用する。 | x | x | x |
.NET CSOM を使用する。 | x | x | |
SharePoint インフラストラクチャとアドインとの間に直接接続がない。 ブラウザーを介して呼び出しを発行する必要がある。 | x | x | |
アドインでサインインしているユーザーとしてリソースにアクセスする必要がある。 | x | x | x |
SharePoint アドインに使用可能なデータ アクセス API
アドインから SharePoint データにアクセスするときには、次の API からの選択が可能です。
Representational State Transfer (REST): JavaScript を使用せず, .NET Framework プラットフォーム上に構築されていないクライアント環境から SharePoint エンティティにアクセスする必要があるシナリオでは、SharePoint は、 Open Data (OData) protocolを使用して SharePoint データに対して CRUDQ (作成、読み取り、更新、削除、クエリ) 操作を実行する REST Web サービスの実装を提供します。 さらに、クライアント オブジェクト モデルのほとんどすべての API には、対応する REST エンドポイントがあります。 これにより、ユーザーのコードは、標準の REST 機能をサポートする技術を使用することで SharePoint と直接やり取りできます。 SharePoint に組み込まれている REST 機能を使用するには、目的の SharePoint オブジェクトに対応するエンドポイントに対しての REST 対応の HTTP 要求をコードに記述して作成します。 REST サービスは HTTP 要求を処理し、Atom 形式か JavaScript Object Notation (JSON) 形式で応答をします。 SharePoint における REST の詳細については、「 SharePoint REST 要求で OData クエリ操作を使用する」をご覧ください。
.NET Framework クライアント オブジェクト モデル (.NET クライアント OM): サーバー側オブジェクト モデルの主要なサイトやリストのほとんどすべてのクラスには, .NET Framework クライアント オブジェクト モデルに該当するクラスがあります。 さらに, .NET Framework クライアント オブジェクト モデルでは、ECM、分類、ユーザー プロファイル、詳細検索、分析、BCS などの SharePoint レベルの機能を拡張するための API のフル セットも公開されています。 クライアント側オブジェクト モデルの詳細については、「 SharePoint での適切な API セットの選択」をご覧ください。
JavaScript クライアント オブジェクト モデル (JSOM): SharePoint は、インライン スクリプトや別途作成した .js ファイルで使用するための JavaScript オブジェクト モデルを提供します。 このモデルには, .NET Framework クライアント オブジェクト モデルと同じ機能がすべて含まれます。 カスタム サーバー側コードを使用できない SharePoint ホスト型アドイン では特に、JSOM は、アドインにカスタム SharePoint コードを追加するための有用な方法になります。 また、Web 開発者は、既存の JavaScript のスキルを使用し、あまり学習に時間をかけずに SharePoint アドイン を作成できます。 クライアント側オブジェクト モデルの詳細については、「 SharePoint での適切な API セットの選択」をご覧ください。
外部データにアクセスするときに SharePoint アドインで使用できる追加の API が存在する場合があります。 これは、外部サービスとシステムが提供する必要があるインターフェイスによって異なります。 これらのインターフェイスも設計で考慮する必要があります。