シングル サインオン (SSO) のエラー メッセージのトラブルシューティング

この記事では、Office アドインのシングル サインオン (SSO) に関する問題のトラブルシューティング方法と、SSO が有効なアドインによって特別な条件やエラーを確実に処理する方法について説明します。

デバッグ ツール

開発時は、アドインの Web サービスからの HTTP 要求および応答を傍受して表示することができるツールを使用することを強くお勧めします。 最も一般的に使われているツールは以下の 2 つです。

サービス API を開発する際には、以下のツールを試してみることもできます。

getAccessTokenAsync からのエラーの原因と処理

13000

getAccessTokenAsync API は、このアドインまたは Office バージョンではサポートされていません。

  • この Office のバージョンは、SSO をサポートしていません。 必要なバージョンは、Office 2016 バージョン 1710、ビルド 8629.nnnn 以降 (“クイック実行” と呼ばれることもある Office 365 のサブスクリプション バージョン) です。 このバージョンを入手するには、Office Insider への参加が必要になることがあります。 詳細については、「Office Insider」を参照してください。
  • アドインのマニフェストに適切な WebApplicationInfo セクションがありません。

13001

ユーザーは Office にサインインしていません。 コードは getAccessTokenAsync メソッドを再呼び出しし、options パラメーターのオプション forceAddAccount: true を渡さなければなりません。

13002

ユーザーはサインインまたは同意を中止しました。

  • アドインがユーザーのサインイン (または同意) の必要がない機能を提供している場合、コードはこのエラーをキャッチし、アドインが継続して実行するようにしなければなりません。
  • アドインで、同意を得たサインイン ユーザーが必要な場合、コードはユーザーに操作を繰り返すよう 1 度だけ要求する必要があります。

13003

ユーザーの種類がサポートされていません。 ユーザーは、有効な Microsoft アカウント、職場または学校のアカウントで Office にサインインしていません。 このエラーは、Office がオンプレミス ドメイン アカウントで実行されている場合に発生する可能性があります。 コードは、ユーザーに Office にサインインするよう要求する必要があります。

13004

無効なリソースです。 アドイン マニフェストは、正しく構成されていません。 マニフェストを更新してください。 詳細は、「マニフェストの問題を検証し、トラブルシューティングする」を参照してください。

13005

無効な許可です。 このエラーは、通常、Office がアドインの Web サービスに対して事前に承認されていないことを意味します。 詳細については、「サービス アプリケーションを作成する」、および「Azure AD V2.0 エンドポイントにアドインを登録する」(ASP.NET) または「Azure AD V2.0 エンドポイントにアドインを登録する」(Node JS) を参照してください。 このエラーは、ユーザーが profile にサービス アプリケーションのアクセス許可を与えていない場合にも発生する可能性があります。

13006

クライアント エラーです。 コードは、ユーザーがサインアウトして Office を再起動するよう指示する必要があります。

13007

Office ホストは、アドインの Web サービスへのアクセス トークンを取得できませんでした。

13008

ユーザーは、前回の getAccessTokenAsync の呼び出しが完了する前に getAccessTokenAsync を呼び出す操作をトリガーしました。 コードは、ユーザーに前の操作が完了した後に操作を繰り返すよう、要求する必要があります。

Azure Active Directory からのサーバー側のエラー

条件付きアクセスおよび多要素認証のエラー

AAD および Office 365 の特定の ID 構成では、Microsoft Graph でアクセス可能な一部のリソースで、ユーザーの Office 365 のテナントでは必要ない場合でも、多要素認証 (MFA) が必要な場合があります。 AAD は、MFA で保護されたリソースへのトークンの要求を、代理フロー経由で受け取ると、アドインの Web サービスに claims プロパティを含む JSON メッセージを返します。 claims プロパティには、さらに必要となる認証要素の情報が含まれています。

サーバー側のコードはこのメッセージをテストし、クライアント側のコードに claims 値を中継する必要があります。 Office が SSO アドインの認証を処理するため、この情報がクライアントで必要になります。クライアントへのメッセージは、エラー (500 Server Error401 Unauthorized など) または成功応答の本文 (200 OK など) のいずれかになります。 どちらの場合でも、アドインの Web API に対する、コードによるクライアント側の AJAX 呼び出しのコールバック (失敗または成功) が、この応答をテストする必要があります。 claims 値が中継されている場合、コードは getAccessTokenAsync を再呼び出しして options パラメーターのオプション authChallenge: CLAIMS-STRING-HERE を渡す必要があります。 AAD がこの文字列を認識すると、ユーザーに追加の要素を入力するよう促してから、代理フローで受け入れられる新しいアクセス トークンを返します。

この MFA 処理を説明するためのサンプルをいくつか用意しています。

  • Office Add-in ASPNET SSO:このサンプルが使用する MSAL ライブラリは、AAD からの MFA メッセージを例外として公開します。 コードはこのメッセージを 500 Server Error 応答としてクライアントに中継します。 クライアント側のスクリプトでは、AJAX 呼び出しの fail コールバックが authChallenge オプションで getAccessTokenAsync を再呼び出しします。 特にファイル ValuesController.cs および Home.js を参照してください。
  • Office Add-in NodeJS SSO:AAD から MFA メッセージは、成功応答として、クライアントに送信されます。 クライアント側のスクリプトでは、AJAX 呼び出しの done コールバックが authChallenge オプションで getAccessTokenAsync を再呼び出しします。 特にファイル auth.ts および program.js を参照してください。

AAD に、ユーザー (またはテナント管理者) がアドインに (Microsoft Graph リソースに対して) 同意した記録がない場合、AAD はエラー メッセージを Web サービスに送信します。 コードは、forceConsent: true オプションで getAccessTokenAsync を再呼び出しするよう、(403 Forbidden 応答の本文などで) クライアントに指示する必要があります。

無効または不足した範囲 (アクセス許可) のエラー

  • サーバー側のコードは、403 Forbidden 応答をクライアントに送って、ユーザーにわかりやすいメッセージを提示しなければなりません。 可能な場合は、エラーについて、コンソールでログを作成するか、ログに記録してください。
  • アドイン マニフェストの [範囲] セクションで、必要なすべてのアクセス許可が指定されていることを確認してください。 また、アドインの Web サービスの登録で同じアクセス許可が指定されていることを確認してください。 スペルミスもチェックしてください。 詳細については、「Azure AD V2.0 エンドポイントにアドインを登録する」(ASP.NET) または「Azure AD V2.0 エンドポイントにアドインを登録する」(Node JS)、および「アドインを構成する」(ASP.NET) または「アドインを構成する」(Node JS) を参照してください。

Microsoft Graph 呼び出し時の期限切れまたは無効なトークンのエラー

MSAL を含む一部の認証および承認ライブラリは、必要に応じてキャッシュされた更新トークンを使用することにより、期限切れトークンのエラーが発生しないようにします。 独自のトークン キャッシュ システムをコーディングすることもできます。 コーディングを行うサンプルについては、Office Add-in NodeJS SSO、特にファイル auth.ts を参照してください。

しかし、期限切れトークンや無効なトークンのエラーが発生した場合、コードは getAccessTokenAsync を再呼び出しして、アドインの Web API のエンドポイントへの呼び出しを繰り返すよう、(401 Unauthorized 応答の本文などで) クライアントに指示しなければなりません。つまり、Microsoft Graph に対する新しいトークンを取得する代理フローを繰り返します。

Microsoft Graph 呼び出し時の無効なトークンのエラー

期限切れトークンのエラーの場合と同様に処理します。 前のセクションを参照してください。

無効な対象ユーザーのエラー

サーバー側のコードは、403 Forbidden 応答をクライアントに送って、ユーザーにわかりやすいメッセージを提示しなければなりません。場合によっては、エラーについて、コンソールでログを作成するか、ログに記録する必要もあります。

トークン検証のためのマルチテナント サポートの追加の詳細については、Azure マルチテナント サンプルに関する記事をご覧ください。