シングル サインオン (SSO) のエラー メッセージのトラブルシューティング (プレビュー)Troubleshoot error messages for single sign-on (SSO) (preview)

この記事では、Office アドインのシングル サインオン (SSO) に関する問題のトラブルシューティング方法と、SSO が有効なアドインによって特別な条件やエラーを確実に処理する方法について説明します。This article provides some guidance about how to troubleshoot problems with single sign-on (SSO) in Office Add-ins, and how to make your SSO-enabled add-in robustly handle special conditions or errors.

注意

現在、シングル サインオン API は Word、Excel、Outlook、PowerPoint のプレビューでサポートされています。The Single Sign-on API is currently supported in preview for Word, Excel, Outlook, and PowerPoint. シングル サインオン API の現在のサポート状態に関する詳細については、[IdentityAPI の要件セット]https://docs.microsoft.com/office/dev/add-ins/reference/requirement-sets/identity-api-requirement-sets)を参照してください。For more information about where the Single Sign-on API is currently supported, see https://docs.microsoft.com/office/dev/add-ins/reference/requirement-sets/identity-api-requirement-sets). SSO を使用するには、アドインのスタートアップ HTML ページの https://appsforoffice.microsoft.com/lib/beta/hosted/office.js から Office JavaScript ライブラリのベータ版を読み込む必要があります。To use SSO, you must load the beta version of the Office JavaScript Library from https://appsforoffice.microsoft.com/lib/beta/hosted/office.js in the startup HTML page of the add-in. Outlook アドインで作業している場合は、Office 365 テナントの先進認証が有効になっていることを確認してください。If you are working with an Outlook add-in, be sure to enable Modern Authentication for the Office 365 tenancy. この方法の詳細については、「Exchange Online: テナントの先進認証を有効にする方法」を参照してください。For information about how to do this, see Exchange Online: How to enable your tenant for modern authentication.

デバッグ ツールDebugging tools

開発時は、アドインの Web サービスからの HTTP 要求および応答を傍受して表示することができるツールを使用することを強くお勧めします。最も一般的なものは、次の 2 つです。We strongly recommend that you use a tool that can intercept and display the HTTP Requests from, and Responses to, your add-in's web service when you are developing. Two of the most popular are:

サービス API を開発する際には、次のツールを試してみることもできます。When developing your service API, you may also want to try:

getAccessTokenAsync からのエラーの原因と処理Causes and handling of errors from getAccessTokenAsync

このセクションで説明するエラー処理の例については、次を参照してください。For examples of the error handling described in this section, see:

注意

このセクションの提案以外にも、Outlook アドインには任意の 13nnn のエラーに対応するその他の方法があります。Besides the suggestions made in this section, an Outlook add-in has an additional way to respond to any 13nnn error. 詳細については、「シナリオ: Outlook アドインでサービスにシングル サインオンを実装する」と AttachmentsDemo サンプル アドインを参照してください。For more details, see Scenario: Implement single sign-on to your service in an Outlook Add-in.

1300013000

getAccessTokenAsync API は、このアドインまたは Office バージョンではサポートされていません。The getAccessTokenAsync API is not supported by the add-in or the Office version.

  • このバージョンの Office は、SSO をサポートしていません。所要のバージョンは Office 2016 バージョン 1710、ビルド 8629.nnnn 以降 (「クイック実行」と呼ばれることもある Office 365 のサブスクリプション バージョン) です。このバージョンを入手するには、Office Insider への参加が必要になることがあります。詳細については、「Office Insider」を参照してください。The version of Office does not support SSO. The required version is Office 2016, Version 1710, build 8629.nnnn or later (the Office 365 subscription version, sometimes called “Click to Run”). You might need to be an Office Insider to get this version. For more information, see Be an Office Insider.
  • アドインのマニフェストに適切な WebApplicationInfo セクションがありません。The add-in manifest is missing the proper WebApplicationInfo section.

アドインがこのエラーに対応するには、ユーザー認証の代替システムにフォールバックする必要があります。Your add-in should respond to this error by falling back to an alternate system of user authentication. 詳細については、「要件とベスト プラクティス」を参照してください。For more information, see Screener Questions Best Practices.

1300113001

ユーザーは Office にサインインしていません。The user is not signed into Office. コードでは、getAccessTokenAsync メソッドを再度呼び出して、options パラメーターでオプション forceAddAccount: true を渡す必要があります。Your code should recall the getAccessTokenAsync method and pass the option forceAddAccount: true in the options parameter. ただし、この操作は複数回実行しないでください。But don't do this more than once. ユーザーはサインインしないと判断する可能性があります。The user may have decided not to sign-in.

Office Online では、このエラーが発生することはありません。This error is never seen in Office Online. ユーザーの Cookie が失効している場合、Office Online はエラー 13006 を返します。If the user's cookie expires, Office Online returns error 13006.

1300213002

ユーザーが、同意ダイアログの [キャンセル] を選択するなどして、サインインまたは同意を中止しました。The user aborted sign in or consent; for example, by choosing Cancel on the consent dialog.

  • アドインがユーザーのサインイン (または同意) の必要がない機能を提供している場合、コードはこのエラーをキャッチし、アドインが継続して実行するようにしなければなりません。If your add-in provides functions that don't require the user to be signed in (or to have granted consent), then your code should catch this error and allow the add-in to stay running.
  • アドインで、同意を得たサインイン ユーザーが必要な場合、コードはユーザーに操作を繰り返すよう 1 度だけ要求する必要があります。If the add-in requires a signed-in user who has granted consent, your code should ask the user to repeat the operation, but not more than once.

1300313003

ユーザーの種類がサポートされていません。User Type not supported. ユーザーは、有効な Microsoft アカウントまたは Office 365 ("職場または学校") アカウントで Office にサインインしていません。The user isn't signed into Office with a valid Microsoft Account or Work or School account. このエラーは、Office がオンプレミス ドメイン アカウントで実行されている場合に発生する可能性があります。This may happen if Office runs with an on-premises domain account, for example. Office にサインインするか、代わりのユーザー認証システムにフォールバックするようにユーザーに求めるコードを作成します。Your code should either ask the user to sign in to Office or fall back to an alternate system of user authentication. 詳細については、「要件とベスト プラクティス」を参照してください。For more information, see Screener Questions Best Practices.

1300413004

無効なリソースです。Invalid Resource. アドイン マニフェストは、正しく構成されていません。The add-in manifest hasn’t been configured correctly. マニフェストを更新してください。Update the manifest. 詳細については、「マニフェストの問題を検証し、トラブルシューティングする」を参照してください。For more information, see Validate and troubleshoot issues with your manifest. 最も一般的な問題は、Resource 要素 (WebApplicationInfo 要素内) にアドインのドメインと一致しないドメインがあることです。The most common problem is that the Resource element (in the WebApplicationInfo element) has a domain that does not match the domain of the add-in. Resource 値のプロトコル部分は "https" ではなく "api" である必要があります。ドメイン名の他のすべての部分は (ポートがある場合はそれも含めて)、アドインと同じである必要があります。Although the protocol part of the Resource value should be "api" not "https"; all other parts of the domain name (including port, if any) should be the same as for the add-in.

1300513005

無効な許可です。Invalid Grant. このエラーは、通常、Office がアドインの Web サービスに対して事前に承認されていないことを意味します。This usually means that Office has not been pre-authorized to the add-in's web service. 詳細については、「サービス アプリケーションを作成する」、および「Azure AD V2.0 エンドポイントにアドインを登録する」(ASP.NET) または「Azure AD V2.0 エンドポイントにアドインを登録する」(Node JS) を参照してください。For more information, see Create the service application and Register the add-in with Azure AD v2.0 endpoint (ASP.NET) or Register the add-in with Azure AD v2.0 endpoint (Node JS). このエラーは、ユーザーが自分の profile に対するアクセス許可をサービス アプリケーションに与えていない場合にも発生する可能性があります。This also may happen if the user has not granted your service application permissions to his or her profile.

1300613006

クライアント エラー。コードでは、ユーザーにサインアウトしてから Office を再起動するように指示するか、Office Online セッションを再開する必要があります。Client Error. Your code should suggest that the user sign out and restart Office, or restart the Office Online session.

1300713007

Office ホストは、アドインの Web サービスへのアクセス トークンを取得できませんでした。The Office host was unable to get an access token to the add-in's web service.

  • 開発中にこのエラーが発生する場合は、アドインの登録とアドインのマニフェストで openid および profile のアクセス許可が指定されていることを確認してください。If this error occurs during development, be sure that your add-in registration and add-in manifest specify the openid and profile permissions. 詳細については、「Azure AD V2.0 エンドポイントにアドインを登録する」(ASP.NET) または「Azure AD V2.0 エンドポイントにアドインを登録する」(Node JS)、および「アドインを構成する」(ASP.NET) または「アドインを構成する」(Node JS) を参照してください。For more information, see Register the add-in with Azure AD v2.0 endpoint (ASP.NET) or Register the add-in with Azure AD v2.0 endpoint (Node JS), and Configure the add-in (ASP.NET) or Configure the add-in (Node JS).
  • 運用環境では、このエラーの原因として考えられることがいくつかあります。In production, there are several things that can cause this error. その一部を次に示します。Some of them are:

    • ユーザーが、以前は同意していた内容を取り消しました。The user has revoked consent, after previously granting it. コードでオプション forceConsent: true を指定して getAccessTokenAsync メソッドをもう一度呼び出す必要があるのに、複数回の呼び出を行いました。Your code should recall the getAccessTokenAsync method with the option forceConsent: true, but no more than once.
    • ユーザーは Microsoft アカウント (MSA) ID を使用しています。The user is has an Microsoft Account (MSA) identity. 職場または学校アカウントで他の 13nnn エラーのいずれかが発生する状況の場合、MSA を使用すると 13007 が発生することがあります。Some situations that would cause one of the other 13nnn errors with a Work or School account, will cause a 13007 when a MSA is used.

    以上のいずれの場合でも、forceConsent オプションを既に一度試行している場合は、操作を後でやり直すようにユーザーに提案するコードを作成することをお勧めします。For all of these cases, if you have already tried the forceConsent option once, then your code could suggest that the user retry the operation later.

1300813008

ユーザーは、前回の getAccessTokenAsync の呼び出しが完了する前に getAccessTokenAsync を呼び出す操作をトリガーしました。The user triggered an operation that calls getAccessTokenAsync before a previous call of getAccessTokenAsync completed. コードでは、ユーザーに前の操作が完了した後に操作を繰り返すよう、要求する必要があります。Your code should ask the user to repeat the operation after the previous operation has completed.

1300913009

アドインは、オプション forceConsent: true を指定して getAccessTokenAsync メソッドを呼び出しましたが、アドインのマニフェストが強制的な同意をサポートしていない種類のカタログに展開されています。The add-in called the getAccessTokenAsync method with the option forceConsent: true, but the add-in's manifest is deployed to a type of catalog that does not support forcing consent. コードでは、getAccessTokenAsync メソッドを再度呼び出して、options パラメーターでオプション forceConsent: false を渡す必要があります。Your code should recall the getAccessTokenAsync method and pass the option forceConsent: false in the options parameter. ただし、forceConsent: true を指定した getAccessTokenAsync の呼び出し自体が、forceConsent: false を指定した getAccessTokenAsync の失敗した呼び出しに対する自動的な応答の可能性があるため、コードでは、forceConsent: false を指定した getAccessTokenAsync が既に呼び出されているかどうかを追跡記録する必要があります。However, the call of getAccessTokenAsync with forceConsent: true might itself have been an automatic response to a failed call of getAccessTokenAsync with forceConsent: false, so your code should keep track of whether getAccessTokenAsync with forceConsent: false has already been called. この場合、Office からサインアウトしてサインインし直すか、代わりのユーザー認証システムにフォールバックするようにユーザーに指示するコードを作成します。If it has, your code should either tell the user to sign out of Office and sign-in again or it should fall back to an alternate system of user authentication. 詳細については、「要件とベスト プラクティス」を参照してください。For more information, see Screener Questions Best Practices.

注意

Microsoft は、必ずしもすべての種類のアドイン カタログに、この制約を課す予定はありません。Microsoft will not necessarilly impose this restriction on any types of add-in catalogs. 制約が課されていない場合は、このエラーが発生することはありません。If it doesn't, then this error will never be seen.

1301013010

ユーザーが Office Online でアドインを実行していて、Edge または Internet Explorer を使用しています。The user is running the add-in on Office Online and is using Edge or Internet Explorer. ユーザーの Office 365 ドメインと、login.microsoftonline.com ドメインは、ブラウザー設定で異なるセキュリティ ゾーンに含まれています。The user’s Office 365 domain, and the login.microsoftonline.com domain, are in a different security zones in the browser settings. このエラーが返された場合、ユーザーには、これについて説明するエラーとゾーンの構成を変更する方法に関するページへのリンクが表示されています。If this error is returned, the user will have already seen an error explaining this and linking to a page about how to change the zone configuration. アドインがユーザーのサインインを必要としない機能を提供している場合、コードでは、このエラーをキャッチして、アドインの実行を続行する必要があります。If your add-in provides functions that don't require the user to be signed in, then your code should catch this error and allow the add-in to stay running.

1301213012

アドインは、getAccessTokenAsync API をサポートしていないプラットフォーム上で実行されています。The add-in is running on a platform that does not support the getAccessTokenAsync API. たとえば、iPad 上ではサポートされていません。For example, it is not supported on iPad. Identity API の要件セット」も参照してください。See also Identity API Requirement Sets.

5000150001

このエラー (getAccessTokenAsync に固有ではありません) は、ブラウザーが office.js ファイルの古いコピーをキャッシュしていることを示す可能性があります。This error (which is not specific to getAccessTokenAsync) may indicate that the browser has cached an old copy of the office.js files. 開発中の場合は、ブラウザーのキャッシュをクリアしてください。When you are developing, clear the browser's cache. また、Office のバージョンが古いため、SSO をサポートしていない可能性も考えられます。Another possibility is that the version of Office is not recent enough to support SSO. 前提条件」を参照してください。See Prerequisites.

運用環境のアドインの場合、アドインがこのエラーに対応するには、ユーザー認証の代替システムにフォールバックする必要があります。In a production add-in, the add-in should respond to this error by falling back to an alternate system of user authentication. 詳細については、「要件とベスト プラクティス」を参照してください。For more information, see Screener Questions Best Practices.

Azure Active Directory からのサーバー側のエラーErrors on the server-side from Azure Active Directory

このセクションで説明するエラー処理の例については、次を参照してください。For samples of the error-handling described in this section, see:

条件付きアクセスおよび多要素認証のエラーConditional access / Multifactor authentication errors

AAD および Office 365 の特定の ID 構成では、Microsoft Graph でアクセス可能な一部のリソースで、ユーザーの Office 365 のテナントでは必要ない場合でも、多要素認証 (MFA) が必要な場合があります。In certain configurations of identity in AAD and Office 365, it is possible for some resources that are accessible with Microsoft Graph to require multifactor authentication (MFA), even when the user's Office 365 tenancy does not. AAD は、MFA で保護されたリソースへのトークンの要求を、代理フロー経由で受け取ると、アドインの Web サービスに claims プロパティを含む JSON メッセージを返します。When AAD receives a request for a token to the MFA-protected resource, via the on-behalf-of flow, it returns to your add-in's web service a JSON message that contains a claims property. claims プロパティには、さらに必要となる認証要素の情報が含まれています。The claims property has information about what further authentication factors are needed.

サーバー側のコードはこのメッセージをテストし、クライアント側のコードに claims 値を中継する必要があります。Your server-side code should test for this message and relay the claims value to your client-side code. Office が SSO アドインの認証を処理するため、この情報がクライアントで必要になります。クライアントへのメッセージは、エラー (500 Server Error401 Unauthorized など) または成功応答の本文 (200 OK など) のいずれかになります。You need this information in the client because Office handles authentication for SSO add-ins. The message to the client can be either an error (such as 500 Server Error or 401 Unauthorized) or in the body of a success response (such as 200 OK). どちらの場合でも、アドインの Web API に対する、コードによるクライアント側の AJAX 呼び出しのコールバック (失敗または成功) が、この応答をテストする必要があります。In either case, the (failure or success) callback of your code's client-side AJAX call to your add-in's web API should test for this response. claims 値が中継されている場合、コードは getAccessTokenAsync を再呼び出しして options パラメーターのオプション authChallenge: CLAIMS-STRING-HERE を渡す必要があります。If the claims value has been relayed, your code should recall getAccessTokenAsync and pass the option authChallenge: CLAIMS-STRING-HERE in the options parameter. AAD がこの文字列を認識すると、ユーザーに追加の要素を入力するよう促してから、代理フローで受け入れられる新しいアクセス トークンを返します。When AAD sees this string, it prompts the user for the additional factor(s) and then returns a new access token which will be accepted in the on-behalf-of flow.

AAD に、ユーザー (またはテナント管理者) がアドインに (Microsoft Graph リソースに対して) 同意した記録がない場合、AAD はエラー メッセージを Web サービスに送信します。If AAD has no record that consent (to the Microsoft Graph resource) was granted to the add-in by the user (or tenant administrator), AAD will send an error message to your web service. コードは、forceConsent: true オプションで getAccessTokenAsync を再呼び出しするよう、(403 Forbidden 応答の本文などで) クライアントに指示する必要があります。Your code must tell the client (in the body of a 403 Forbidden response, for example) to recall getAccessTokenAsync with the forceConsent: true option.

無効または不足した範囲 (アクセス許可) のエラーInvalid or missing scope (permission) errors

Microsoft Graph 呼び出し時の期限切れまたは無効なトークンのエラーExpired or invalid token errors when calling Microsoft Graph

MSAL を含む一部の認証および承認ライブラリは、必要に応じてキャッシュされた更新トークンを使用することにより、期限切れトークンのエラーが発生しないようにします。Some authentication and authorization libraries, including MSAL, prevent expired token errors by using a cached refresh token whenever necessary. 独自のトークン キャッシュ システムをコーディングすることもできます。You can also code your own token caching system. コーディングを行うサンプルについては、Office Add-in NodeJS SSO、特にファイル auth.ts を参照してください。For a sample that does this, see Office Add-in NodeJS SSO, especially the file auth.ts.

しかし、期限切れトークンや無効なトークンのエラーが発生した場合、コードは getAccessTokenAsync を再呼び出しして、アドインの Web API のエンドポイントへの呼び出しを繰り返すよう、(401 Unauthorized 応答の本文などで) クライアントに指示しなければなりません。つまり、Microsoft Graph に対する新しいトークンを取得する代理フローを繰り返します。But if you get an expired token or invalid token error, your code must tell the client (in the body of a 401 Unauthorized response, for example) to recall getAccessTokenAsync and repeat the call to the endpoint of your add-in's web API, which will repeat the on-behalf-of flow to obtain a new token for Microsoft Graph.

Microsoft Graph 呼び出し時の無効なトークンのエラーInvalid token error when calling Microsoft Graph

このエラーは、期限切れトークンのエラーと同様に処理します。前のセクションを参照してください。Handle this error the same as an expired token error. See previous section.

無効な対象ユーザーのエラーInvalid audience error

サーバー側のコードは、403 Forbidden 応答をクライアントに送って、ユーザーにわかりやすいメッセージを提示しなければなりません。場合によっては、エラーについて、コンソールでログを作成するか、ログに記録する必要もあります。Your server-side code should send a 403 Forbidden response to the client which should present a friendly message to the user and possibly also log the error to the console or record it in a log.

トークン検証のためのマルチテナント サポートの追加の詳細については、Azure マルチテナント サンプルに関する記事をご覧ください。For more on adding multitenant support for token validation, see the Azure Multitenant Sample.