信頼度の高い SharePoint アドインのトラブルシューティング

Fiddler ツールを使用する

無料の Fiddler ツールを使用すると、アドインのリモート コンポーネントから SharePoint に送信される HTTP 要求をキャプチャできます。

このツールには、要求に含まれるアクセス トークンを自動的にデコードする無料の拡張機能があります。

Web アプリケーション サーバーに Fiddler をインストールしたら、次のマークアップを web.config ファイルに追加して、リモート Web アプリケーションからの要求がこのプロキシを経由するようにします。 この方法で、Fiddler のトレースをキャプチャして、エラーが発生したときの SharePoint からの完全な応答を確認できます。

注:

Fiddler を実行しないときは、忘れずにこのマークアップを削除してください。 このマークアップを削除しないと、アドインが HTTP 要求を実行できません。

<system.net>
  <defaultProxy>
    <proxy usesystemdefault="False" bypassonlocal="False" proxyaddress="http://127.0.0.1:8888" />
  </defaultProxy>
</system.net>

Fiddler をインストールしたら、要求の GUID が含まれる SharePoint からの応答ヘッダーもチェックできます。 この要求の GUID は関連付け ID であり、これをログ内で検索すると、その要求に関連するログ エラーがあった場合にそれを見つけることができます。

401 Unauthorized エラー

高信頼アドインが最初に SharePoint にアクセスするとき、 401 Unauthorized エラーを引き起こす可能性があるものがいくつかあります。 クライアント側オブジェクト モデル (CSOM) を使用している場合、エラーは次のようになります。

[WebException: The remote server returned an error: (401) Unauthorized.]
   System.Net.HttpWebRequest.GetResponse() +8515936
   Microsoft.SharePoint.Client.SPWebRequestExecutor.Execute() +178
   Microsoft.SharePoint.Client.ClientRequest.ExecuteQueryToServer(ChunkStringBuilder sb) +1427
   Microsoft.SharePoint.Client.ClientRequest.ExecuteQuery() +270
   Microsoft.SharePoint.Client.ClientRuntimeContext.ExecuteQuery() +146
   Microsoft.SharePoint.Client.ClientContext.ExecuteQuery() +666
   S2STestWeb.Default.Page_Load(Object sender, EventArgs e) in c:\MyFiles\HightrustTest\HightrustTestWeb\Default.aspx.cs:28
   System.Web.UI.Control.LoadRecursive() +71
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3178

TokenHelper ファイルと Windows ID を使用する場合は、例外をトリガーするコードが次のようになります。

ClientContext clientContext = 
    TokenHelper.GetS2SClientContextWithWindowsIdentity(sharepointUrl, Request.LogonUserIdentity); 
clientContext.Load(clientContext.Web);
clientContext.ExecuteQuery();

この問題のトラブルシューティングを行うには、まず Visual Studio デバッガーを使用して、アクセス トークンと ClientContext オブジェクトが正常に構築されていることを確認します。 正常に構築されている場合は、次の可能性を検討します。

起こり得る問題と解決策:

  • リモート Web アプリケーションにアクセスしているユーザーのユーザー プロファイルが作成されていません。 ユーザー プロファイルを作成します。

  • アクセスしようとしているリソースに対するアクセス許可を、アドインが持っていません。 SharePoint 管理シェルを開き、次の Windows PowerShell コマンドレットを実行します。 変数 $web はアクセスしようとしている SharePoint の Web サイト、$appPrincipal はアドイン ID です。 詳細については、「Set-SPAppPrincipalPermission」を参照してください。

      Set-SPAppPrincipalPermission -Site $web -AppPrincipal $appPrincipal -Scope Site -Right FullControl
    
  • ご使用の Web アプリケーションが匿名の要求を受け入れています。 これは、アクセス トークンに実際のユーザー ID が含まれないことを意味します。 IIS で、リモート Web アプリのルート ディレクトリに対して匿名アクセスが無効になっていることを確認します。 これは、リモート Web アプリケーションをデバッグし、default.aspx.cs (または .vb) ファイルの Request.LogonUserIdentity 値を確認して、匿名ユーザーでないことを確認することでもチェックできます。

  • デジタル証明書が、信頼された証明書ストアに追加されませんでした。 信頼の 高い SharePoint アドインのパッケージ化と発行に関するページの手順に従っていることを確認してください。

設定ファイルと登録フォームのドメイン名の不一致により、認証できない場合があります。 次の 4 つの値が完全に同一でなければなりません。

  • SharePoint アドインが AppRegNew.aspx で登録されるときに指定された [ アドイン ドメイン]。

  • リモート Web アプリケーションのセキュリティ証明書が登録されているドメイン。

  • AppManifest.xml ファイルの StartPage 値のドメイン部分。

  • AppManifest.xml で指定されたイベント レシーバーの URL のドメイン部分。

この点に関連して、次のことにご注意ください。

  • SharePoint アドインのリモート コンポーネントが 443 以外のポートを使用している場合、4 つの場所のすべてで、ドメインの一部としてポート (たとえば、MarketingServer:3333) を明示的に含める必要があります (既定のポートが 443 の HTTPS プロトコルを使用する必要があります)。

  • アドインをパッケージ化する前に、AppManifest.xml ファイルの StartPage 値 (およびすべてのイベント レシーバー URL) にドメインをハードコーディングする必要があります。 Visual Studio の発行ウィザードを使用してアドインをパッケージ化する場合は、ドメインを入力するよう求めるプロンプトが表示され、Office Developer Tools for Visual Studio により、そのドメインが (デバッグ中に使用される ~remoteWebUrl トークンの代わりに) StartPage 値に自動的に挿入されます。 しかし、発行ウィザードを使用しない場合は、手動でトークンをドメイン (およびプロトコル) に置き換える必要があります。たとえば、https://MarketingServer または https://MarketingServer:3333 です。

そのシリアル番号の証明書が存在しないことを示すランタイム エラー

web.configに正しい証明書シリアル番号があり、Windows 証明書ストアに証明書が表示されている場合は、web.configのシリアル番号に余分な文字が隠されている可能性があります。これは、シリアル番号が Microsoft 管理コンソールからコピーおよび貼り付けされた場合に発生します。 web.config からシリアル番号値全体を削除し、手で再入力してください。

関連項目