低信頼承認を使用する SharePoint アドインの作成
SharePoint アドイン (または外部アプリケーション) のリモート コンポーネントは、各 HTTP 要求でアクセス トークンを SharePoint に渡すことにより、SharePoint リソースへの承認を取得できます。 リモート コンポーネントは、顧客の Office 365 テナンシーに関連付けられた Microsoft Azure Access Control Service (ACS) アカウントからアクセス トークンを取得します。 Azure ACS は、SharePoint をリソース サーバーとし、リモート コンポーネントをクライアントとして、フローと呼ばれる OAuth 2.0 トランザクションの承認サーバーとして機能します。 関連するプロトコルの仕様については、「Web 承認プロトコル (OAuth)」を参照してください。
重要
Azure Active Directory (Azure AD) のサービスである Azure アクセス制御 (ACS) は、2018 年 11 月 7 日に廃止されます。 SharePoint アドイン モデルでは、(この廃止の影響を受けない) https://accounts.accesscontrol.windows.net
ホスト名を使用しているため、この廃止による影響はありません。 詳細については、「SharePoint アドインに対する Azure アクセス制御の終了の影響」を参照してください。
低信頼承認システムを使用するプロバイダー向けのホスト型 SharePoint アドインは、Office ストアで販売することができ、顧客の Office 365 テナンシーを使用して Azure ACS との信頼を確立するように構成された Microsoft SharePoint Online またはオンプレミス SharePoint ファームのいずれかにインストールできます。 低信頼システムを使用する SharePoint アドインをインストールするには、顧客が Office 365 テナンシーを持っている必要があります。 ただし、顧客は他の目的でこのテナンシーを使用する必要はありません。 オンプレミスのファームを Office 365 テナンシーにリンクする手順については、「Office 365 SharePoint サイトを使用してオンプレミスの SharePoint サイトのプロバイダー向けのホスト型アドインに権限を付与する」を参照してください。
Azure ACS を使用した登録
低信頼システムを使用するには、SharePoint アドインを最初に Azure ACS に登録してから、SharePoint ファームまたは SharePoint Online テナンシーのアプリ管理サービスに登録する必要があります (これが "アプリ管理サービス" と呼ばれるのは、当初 SharePoint アドインが "SharePoint 用アプリ" と呼ばれていたためです)。
Office ストアを介して販売するアドインの場合、ACS への登録は販売者ダッシュボードで実行し、サービスへの登録はアドインがインストールされるときに実行されます。
組織のアドイン カタログに配布されるアドインの場合、ACS とサービスの両方への登録は、アドインがインストールされる SharePoint テナントまたはファームの _Layouts\15\AppRegNew.aspx ページで実行されます。 SharePoint にアクセスする外部の非 SharePoint アプリケーションも登録する必要があります。 このカテゴリには、Office アドイン、Windows ストア アプリ、Web アプリケーション、スマートフォン アプリなどのデバイス アプリが含まれます。
注:
登録するには、アプリケーションがインターネット ドメインを持っている必要があります。 この目的のために任意の既存のドメインを使用できますが、自分で所有していないドメインが今後もずっと存在するとは言い切れません。このため、ネイティブ デバイス アプリケーションの一部に Web アプリケーションを含める必要があります。この場合、その Web アプリケーション コンポーネントは、登録を有効にする以外の役割を持っていなくても構いません。 この方法で設計された詳細なコードの例については、「アドイン モデルを使用してサイトをバッチ プロビジョニングする」を参照してください。
登録の詳細については、「SharePoint アドインを登録する」を参照してください。
アドイン シークレットの有効期限
アドイン シークレットは、12 か月ごとに置き換える必要があります。 詳細については、「SharePoint アドインで期限が切れたクライアント シークレットを置換する」を参照してください。
承認ポリシー
SharePoint アドインは、3 つの承認ポリシーのいずれかを使用するように設計できます。
ユーザー用ポリシー。 ユーザー用ポリシーが使用されている場合、SharePoint はユーザーのアクセス許可のみをチェックします。 SharePoint がこのポリシーを使用するのは、ユーザーがアドインを使用せずにリソースに直接アクセスしている場合です。たとえば、ユーザーが初めて SharePoint Web サイトのホーム ページを開いたり、PowerShell から SharePoint API にアクセスしたりする場合です。
アドイン用ポリシー。 このポリシーを使用するアドインは、ユーザーがアクセス許可を持たない操作でも、アドインがアクセス許可を持っていればその操作を実行できます。 開発者は、アドインのアドイン マニフェストでこのポリシーの使用を要求する必要があります。 この要求は、アドインをインストールするユーザーによって承認される必要があります。 このポリシーは、プロバイダー向けのホスト型 SharePoint アドインでのみ使用できます。
ユーザー + アドイン ポリシー。 このポリシーを使用するアドインは、アドインとユーザーの両方がアクセス許可を持っている操作のみを実行できます。 これは既定のポリシーで、開発者が他のポリシーを使用する特定の手順を踏まない限り、このポリシーが使用されます。
承認ポリシーの詳細については、「SharePoint のアドイン承認ポリシーの種類」を参照してください。
2 つの OAuth ランタイム フロー
クラウド ホスト型 SharePoint アドイン、または SharePoint にアクセスしている外部アプリケーションが実行されると、そのたびにフロー (つまりアドイン、SharePoint、ACS、および場合によってはエンド ユーザーの間の一連のやり取り) が発生します。 フローの最終結果として、アプリケーションが SharePoint に対して行う、作成、読み込み、更新、削除 (CRUD) の各要求に含まれるアクセス トークンを SharePoint が受信します。
SharePoint で使用される 2 つの主要な OAuth フローがあります。 1 つは、クラウドでホストされる SharePoint アドイン用です。"オンザフライ" と呼ばれるもう 1 つは、SharePoint データにアクセスする他のプラットフォーム上のアプリケーション用です。
コンテキスト トークン フロー。 SharePoint アドインのリモート コンポーネントは、SharePoint クライアント オブジェクト モデル (CSOM) または REST エンドポイントを使用して、SharePoint への呼び出しを行います。 SharePoint は、リモート サーバーに送信できる ACS からのコンテキスト トークンを要求します。 リモート サーバーはコンテキスト トークンを使用して、ACS からのアクセス トークンを要求します。 次に、リモート サーバーはアクセス トークンを使用して、SharePoint へ逆方向に通信します。
このフローの詳細については、「SharePoint アドインのコンテキスト トークン OAuth フロー」を参照してください。
認証コード フロー。 SharePoint アドインには、インストール時に SharePoint のリソースに対して必要なアクセス許可が付与されます。 ただし、SharePoint にインストールされていないアプリケーションは、"オン ザ フライ" で、つまり実行時に毎回アクセス許可を求める必要があります。 このフローには SharePoint のコンテキスト トークンは含まれません。 その代わりに、アドインが実行されて SharePoint にアクセスしようとした時点で、要求しているアプリケーションへのアクセス許可を付与するよう促すメッセージが SharePoint からユーザーに表示されます。 ユーザーがアクセス許可を付与すると、SharePoint はアプリケーションに渡す承認コードを ACS から取得します。 アプリケーションはコードを使用して ACS からアクセス トークンを取得し、それを使用して SharePoint と通信します。
このフローの詳細については、「SharePoint アドインの認証コード OAuth フロー」を参照してください。
低信頼 SharePoint アドインのトラブルシューティング
この記事では、いくつかの一般的なトラブルシューティングのガイダンスと、低信頼承認システムを使用する SharePoint アドインでのいくつかの特定の問題に関する情報を提供します。
Fiddler ツールを使用する
無料の Fiddler ツールを使用すると、アドインのリモート コンポーネントから SharePoint に送信される HTTP 要求をキャプチャできます。 このツールには、要求に含まれるアクセス トークンを自動的にデコードする無料の拡張機能があります。
開発時に OAuth の HTTPS 要件をオフにする
OAuth では、SharePoint が HTTPS を実行する必要があります (サービスだけでなく SharePoint も)。 これは、アドインの開発時に妨げになる場合があります。 たとえば、アドインのデバッグ時に SharePoint を呼び出そうとすると、アドインが実行される場所である "localhost" に SSL サポートがないため、403 (禁止) メッセージを受け取ることがあります。
開発中は、次の Windows PowerShell コマンドレットを使用して、HTTPS 要件をオフにできます。
$serviceConfig = Get-SPSecurityTokenServiceConfig
$serviceConfig.AllowOAuthOverHttp = $true
$serviceConfig.Update()
後で HTTPS 要件をオンに戻すには、次の Windows PowerShell コマンドレットを使用します。
$serviceConfig = Get-SPSecurityTokenServiceConfig
$serviceConfig.AllowOAuthOverHttp = $false
$serviceConfig.Update()
その他の SSL およびドメイン関連の承認エラー
設定ファイルと登録フォームのドメイン名の不一致により、認証できない場合があります。 次の 4 つの値が完全に同一でなければなりません。
SharePoint アドインを AppRegNew.aspx または販売者ダッシュボードのいずれかに登録する際に指定するアドイン ドメイン。
リモート Web アプリケーションのセキュリティ証明書が登録されているドメイン。
AppManifest.xml ファイルの StartPage 値のドメイン部分。
AppManifest.xml で指定されたイベント レシーバーの URL のドメイン部分。
この点に関連して、次のことにご注意ください。
SharePoint アドインのリモート コンポーネントが 443 以外のポートを使用している場合、4 つの場所のすべてで、ドメインの一部としてポート (たとえば、
contoso.com:3333
) を明示的に含める必要があります (既定のポートが 443 の HTTPS プロトコルを使用する必要があります)。リモート Web アプリケーションに DNS CNAME エイリアスを作成する場合は、4 か所すべてでドメイン値に CNAME エイリアスを使用します。 たとえば、アプリケーションが contoso.cloudapp.net でホストされていて、これに contososoftware.com という CNAME を作成する場合は、contososoftware.com をドメインとして使用します。
アドインをパッケージ化する前に、AppManifest.xml ファイルの StartPage 値 (およびすべてのイベント レシーバー URL) にドメインをハードコーディングする必要があります。 Visual Studio の発行ウィザードを使用してアドインをパッケージ化する場合は、ドメインを入力するよう求めるプロンプトが表示され、Office Developer Tools for Visual Studio により、そのドメインが (デバッグ中に使用される
~remoteWebUrl
トークンの代わりに) StartPage 値に自動的に挿入されます。 しかし、発行ウィザードを使用しない場合、または発行ウィザードを使用するもののリモート Web アプリケーションが Azure に展開される場合は、手動でトークンをドメイン (およびプロトコル) に置き換える必要があります。たとえば、https://contososoftware.com
またはhttps://MyCloudVM:3333
です。
エラー "基になる接続が閉じられました: SSL/TLS のセキュリティで保護されているチャネルに対する信頼関係を確立できませんでした。"
このエラーは OAuth の問題ではなく、SSL ハンドシェイクの問題です。 使用している証明書が SharePoint によって信頼されていること、また証明書がエンドポイント名と一致していることを確認してください。
HTTP DAV メソッドを使用した SharePoint からのファイル読み取りエラー
HTTP DAV は OAuth では動作しません。 SharePoint のクライアント オブジェクト モデル (CSOM) を使用している場合は、以下のコードを使用してファイルを読み込みます。
File f = clientContext.Web.GetFileByServerRelativeUrl( url);
ClientResult<Stream> r = f.OpenBinaryStream();
clientContext.ExecuteQuery();