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

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

注:

現在、シングル サインオン API は Word、Excel、Outlook, および PowerPoint でサポートされています。 シングル サインオン API の現在のサポート状態に関する詳細は、「IdentityAPI の要件セット」を参照してください。 Outlook アドインを使用している場合は、Microsoft 365 テナントの先進認証を有効にしてください。 これを行う方法については、「Exchange Onlineで Outlook の先進認証を有効または無効にする」を参照してください。

デバッグ ツール

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

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

このセクションで説明するエラー処理の例については、次を参照してください。

13000

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

  • この Office のバージョンは、SSO をサポートしていません。 必要なバージョンは、任意の月次チャネルの Microsoft 365 サブスクリプションです。
  • アドインのマニフェストに適切な WebApplicationInfo セクションがありません。

アドインがこのエラーに対応するには、ユーザー認証の代替システムにフォールバックする必要があります。 詳細については、「要件とベスト プラクティス」を参照してください。

13001

ユーザーは Office にサインインしていません。 ほとんどのシナリオでは、AuthOptions パラメーターでオプション allowSignInPrompt: true を渡して、このエラーが表示されないようにすることをお勧めします。

ただし、例外がある場合があります。 たとえば、ユーザーがすでに Office にログインしている場合にのみ、ユーザーがログインしていることが必要な機能とともにアドインが開くようにするとします。 ユーザーがログインしていない場合は、ユーザーがサインインしていることが必要のない別の機能のセットとともにアドインが開くようにするとします。 この場合、アドインが起動する際に実行されるロジックでは、allowSignInPrompt: true を含めずに getAccessToken が呼び出されます。 別の機能のセットを表示するようにアドインに指示するためのフラグとして、13001エラーを使用します。

別の方法として、13001 に対応するために、ユーザー認証の代替システムにフォールバックすることもできます。 これにより、ユーザーを Office ではなく AAD にサインインさせられます。

このエラーは Office on the web では一度も確認されていません。 ユーザーの Cookie が失効すると、Office on the web はエラー 13006 を返します。

13002

ユーザーが、同意ダイアログの [キャンセル] を選択するなどして、サインインまたは同意を中止しました。

  • アドインがユーザーのサインイン (または同意) の必要がない機能を提供している場合、コードはこのエラーをキャッチし、アドインが継続して実行するようにしなければなりません。
  • 同意済みのサインインしているユーザーがアドインで必要な場合は、コードは [サインイン] ボタンを表示させる必要があります。

13003

ユーザーの種類がサポートされていません。 ユーザーは、有効な Microsoft アカウントまたはMicrosoft 365 Educationまたは職場アカウントを使用して Office にサインインしていません。 このエラーは、Office がオンプレミス ドメイン アカウントで実行されている場合に発生する可能性があります。 コードでは、ユーザー認証の代替システムにフォールバックする必要があります。 Outlook では、このエラーは、Exchange Onlineでユーザーのテナントに対して先進認証が無効になっている場合にも発生する可能性があります。 詳細については、「要件とベスト プラクティス」を参照してください。

13004

無効なリソースです。 (このエラーは、開発中にのみ表示する必要があります)。アドイン マニフェストが正しく構成されていません。 マニフェストを更新してください。 詳細については、「Office アドインのマニフェストを検証する」を参照してください。 最も一般的な問題は、 <Resource> 要素 ( <WebApplicationInfo> 要素内) に、アドインのドメインと一致しないドメインがあるということです。 Resource 値のプロトコル部分は "https" ではなく "api" である必要があります。ドメイン名の他のすべての部分は (ポートがある場合はそれも含めて)、アドインと同じである必要があります。

13005

無効な許可です。 このエラーは、通常、Office がアドインの Web サービスに対して事前に承認されていないことを意味します。 詳細については、「サービス アプリケーションを作成する」および「Azure AD v2.0 エンドポイントにアドインを登録する」を参照してください。 このエラーは、ユーザーが自分の profile に対するアクセス許可をサービス アプリケーションに与えていない場合、または同意を取り消した場合にも発生する可能性があります。 コードでは、ユーザー認証の代替システムにフォールバックする必要があります。

開発中の場合、別の原因として、アドインを使用する Internet Explorer およびユーザーが自己署名証明書を使用していることが考えられます。 (アドインで使用されているブラウザーまたは Web ビューを特定するには、「 Office アドインで使用されるブラウザーと Webview コントロール」を参照してください)。

13006

クライアント エラーです。 このエラーは Office on the web でのみ確認されています。 コードでは、サイン アウトし、次に Office のブラウザー セッションを再起動することをユーザーに促す必要があります。

13007

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

  • 開発中にこのエラーが発生する場合は、アドインの登録とアドイン マニフェストで profile のアクセス許可および (MSAL.NET を使用している場合は) openid のアクセス許可が指定されていることを確認してください。 詳細については、「Azure AD v2.0 エンドポイントにアドインを登録する」を参照してください。
  • 運用環境では、アカウントの不一致によってこのエラーが発生する可能性があります。 たとえば、職場または学校アカウントが想定されていたときに、ユーザーが個人用 Microsoft アカウント (MSA) でサインインしようとするとします。 このような場合、コードは別のユーザー認証システムにフォールバックする必要があります。 アカウントの種類の詳細については、「シングルテナント アプリとマルチテナント アプリの ID とアカウントの種類」を参照してください。

13008

ユーザーは、前回の getAccessToken の呼び出しが完了する前に getAccessToken を呼び出す操作をトリガーしました。 このエラーは Office on the web でのみ確認されています。 コードでは、ユーザーに前の操作が完了した後に操作を繰り返すよう要求する必要があります。

13010

ユーザーは、Microsoft Edge 上の Office でアドインを実行しています。 ユーザーの Microsoft 365 ドメインと login.microsoftonline.com ドメインは、ブラウザー設定の別のセキュリティ ゾーンにあります。 このエラーは Office on the web でのみ確認されています。 このエラーが返された場合、ユーザーには、これについて説明するエラーとゾーンの構成を変更する方法に関するページへのリンクが表示されています。 アドインがユーザーのサインインを必要としない機能を提供している場合、コードでは、このエラーをキャッチして、アドインの実行を続行する必要があります。

13012

考えられる原因はいくつかあります。

  • アドインは、getAccessToken API をサポートしていないプラットフォーム上で実行されています。 たとえば、iPad 上ではサポートされていません。 「Identity API 要件セット」も参照してください。
  • Office ドキュメントは、[開く] ドロップダウン メニューの [Teams で編集] オプションを使用して、Teams チャネルの [ファイル] タブからかれました。 getAccessTokenこのシナリオでは、API はサポートされていません。
  • getAccessToken への呼び出しで forMSGraphAccess オプションが渡され、ユーザーが AppSource からアドインを取得しました。 このシナリオでは、アドインが必要とする Microsoft Graph スコープ (権限) について、テナント管理者はアドインに同意していません。 Office では、ユーザーに求めることができるのは AAD profile スコープへの同意のみであるため、allowConsentPrompt を使用して getAccessToken を取り消しても問題は解決できません。

コードでは、ユーザー認証の代替システムにフォールバックする必要があります。

開発中は、アドインは Outlook でサイドロードされ、getAccessToken への呼び出しで forMSGraphAccess オプションが渡されます。

13013

getAccessToken 短時間で何度も呼び出されたため、Office は最新の呼び出しを調整しました。 これは通常、 メソッドの呼び出しの無限ループによって発生します。 メソッドを呼び出すシナリオが推奨されます。 ただし、コードでは、メソッドが繰り返し呼び出されないように、カウンターまたはフラグ変数を使用する必要があります。 同じ "再試行" コード パスが再度実行されている場合、コードは別のユーザー認証システムにフォールバックする必要があります。 コード例については、変数が retryGetAccessTokenHomeES6.js または ssoAuthES6.js でどのように使用されるかを参照してください。

50001

このエラー (getAccessToken に固有ではありません) は、ブラウザーが office.js ファイルの古いコピーをキャッシュしていることを示す可能性があります。 開発中の場合は、ブラウザーのキャッシュをクリアしてください。 また、Office のバージョンが古いため、SSO をサポートしていない可能性も考えられます。 Windows での最小バージョンは、16.0.12215.20006 です。 Mac では、16.32.19102902 です。

運用環境のアドインの場合、アドインがこのエラーに対応するには、ユーザー認証の代替システムにフォールバックする必要があります。 詳細については、「要件とベスト プラクティス」を参照してください。

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

このセクションで説明するエラー処理の例については、次を参照してください。

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

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

コードは、この claims プロパティについてテストする必要があります。 アドインのアーキテクチャによっては、クライアント側でテストすることができます。または、サーバー側でテストし、クライアントにリレーすることができます。 SSO アドインの認証は Office によって処理されるため、この情報がクライアントで必要になります。この情報をサーバー側からリレーする場合、クライアントへのメッセージは、エラー (500 Server Error401 Unauthorized など) または成功応答の本文 (200 OK など) のいずれかになります。 どちらの場合でも、アドインの Web API に対する、コードによるクライアント側の AJAX 呼び出しのコールバック (失敗または成功) が、この応答をテストする必要があります。

アーキテクチャに関係なく、要求の値が AAD から送信された場合は、コードを呼び出 getAccessToken して、 パラメーターに オプション authChallenge: CLAIMS-STRING-HEREoptions 渡す必要があります。 AAD がこの文字列を認識すると、ユーザーに追加の要素を入力するよう促してから、代理フローで受け入れられる新しいアクセス トークンを返します。

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

管理者のみが同意できる Microsoft Graph のスコープがアドインで必要な場合は、コードはエラーをスローする必要があります。 唯一必要なスコープに対して同意できるのがユーザーである場合は、コードはユーザー認証の代替システムにフォールバックする必要があります。

無効または見つからないスコープ (アクセス許可) のエラー

この種類のエラーが表示されるのは、開発中のみである必要があります。

  • サーバー側のコードでは、403 Forbidden 応答をクライアントに送り、そのエラーのログをコンソールで作成するか、ログに記録する必要があります。
  • アドイン マニフェストの範囲セクションで、必要なすべてのアクセス許可が指定されていることを確認してください。 また、アドインの Web サービスの登録で同じアクセス許可が指定されていることを確認してください。 スペルミスもチェックしてください。 詳細については、「Azure AD v2.0 エンドポイントにアドインを登録する」を参照してください。

Microsoft Graph のアクセス トークンの対象ユーザーエラーが無効です

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