Microsoft ID プラットフォームと OAuth 2.0 認証コード フローMicrosoft identity platform and OAuth 2.0 authorization code flow

適用対象:Applies to:
  • Microsoft ID プラットフォーム エンドポイントMicrosoft identity platform endpoint

デバイスにインストールされているアプリに、Web API など、保護されているリソースにアクセスする権利を与えるために OAuth 2.0 認証コード付与を利用できます。The OAuth 2.0 authorization code grant can be used in apps that are installed on a device to gain access to protected resources, such as web APIs. Microsoft ID プラットフォームによる OAuth 2.0 の実装を使用すると、サインインおよび API アクセスをモバイル アプリやデスクトップ アプリに追加できます。Using the Microsoft identity platform implementation of OAuth 2.0, you can add sign in and API access to your mobile and desktop apps. このガイドでは、Azure オープンソース認証ライブラリを利用せず、HTTP メッセージを送受信する方法について説明します。本ガイドは言語非依存です。This guide is language-independent, and describes how to send and receive HTTP messages without using any of the Azure open-source authentication libraries.

注意

Microsoft ID プラットフォーム エンドポイントでは、Azure Active Directory のすべてのシナリオや機能がサポートされているわけではありません。Not all Azure Active Directory scenarios & features are supported by the Microsoft identity platform endpoint. Microsoft ID プラットフォーム エンドポイントを使用すべきかどうかを判定するには、Microsoft ID プラットフォームの制限に関するページを参照してください。To determine if you should use the Microsoft identity platform endpoint, read about Microsoft identity platform limitations.

OAuth 2.0 承認コード フローは、 OAuth 2.0 仕様のセクション 4.1で規定されています。The OAuth 2.0 authorization code flow is described in section 4.1 of the OAuth 2.0 specification. Web アプリネイティブにインストールされるアプリを含め、大半のアプリ タイプで認証と承認を行う際にこのフローが使用されます。It's used to perform authentication and authorization in the majority of app types, including web apps and natively installed apps. アプリは、このフローによって安全に access_tokens を取得し、Microsoft ID プラットフォーム エンドポイントを使用して保護されているリソースにアクセスすることができます。The flow enables apps to securely acquire access_tokens that can be used to access resources secured by the Microsoft identity platform endpoint.

プロトコルのダイアグラムProtocol diagram

まとめると、ネイティブ/モバイル アプリケーションの全体的な認証フローは次のようになります。At a high level, the entire authentication flow for a native/mobile application looks a bit like this:

OAuth Auth Code Flow

承認コードを要求するRequest an authorization code

承認コード フローは、クライアントがユーザーを /authorize エンドポイントにリダイレクトさせることから始まります。The authorization code flow begins with the client directing the user to the /authorize endpoint. この要求で、クライアントは、ユーザーから取得する必要のあるアクセス許可を指定します。In this request, the client indicates the permissions it needs to acquire from the user:

// Line breaks for legibility only

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=query
&scope=openid%20offline_access%20https%3A%2F%2Fgraph.microsoft.com%2Fuser.read
&state=12345

ヒント

この要求を実行するには、以下のリンクをクリックしてください。Click the link below to execute this request! サインイン後、ブラウザーは https://localhost/myapp/ にリダイレクトされ、アドレス バーに code が含まれた状態になります。After signing in, your browser should be redirected to https://localhost/myapp/ with a code in the address bar. https://login.microsoftonline.com/common/oauth2/v2.0/authorize...https://login.microsoftonline.com/common/oauth2/v2.0/authorize...

パラメーターParameter 必須/省略可能Required/optional 説明Description
tenant 必須required 要求パスの {tenant} の値を使用して、アプリケーションにサインインできるユーザーを制御します。The {tenant} value in the path of the request can be used to control who can sign into the application. 使用できる値は、commonorganizationsconsumers およびテナント識別子です。The allowed values are common, organizations, consumers, and tenant identifiers. 詳細については、 プロトコルの基礎に関するページを参照してください。For more detail, see protocol basics.
client_id 必須required Azure portal の [アプリの登録] エクスペリエンスでアプリに割り当てられたアプリケーション (クライアント) IDThe Application (client) ID that the Azure portal – App registrations experience assigned to your app.
response_type 必須required 承認コード フローでは code を指定する必要があります。Must include code for the authorization code flow.
redirect_uri 必須required アプリ の redirect_uri。アプリは、この URI で認証応答を送受信することができます。The redirect_uri of your app, where authentication responses can be sent and received by your app. ポータルで登録したいずれかの redirect_uri と完全に一致させる必要があります (ただし、URL エンコードが必要)。It must exactly match one of the redirect_uris you registered in the portal, except it must be url encoded. ネイティブ アプリとモバイル アプリでは、https://login.microsoftonline.com/common/oauth2/nativeclient の既定値を使用します。For native & mobile apps, you should use the default value of https://login.microsoftonline.com/common/oauth2/nativeclient.
scope 必須required ユーザーに同意を求める スコープ の、スペースで区切られたリスト。A space-separated list of scopes that you want the user to consent to. 要求の /authorize の段階では、これに複数のリソースを含めることができ、ご利用のアプリが呼び出す必要がある複数の Web API に対して同意を取得することを許可します。For the /authorize leg of the request, this can cover multiple resources, allowing your app to get consent for multiple web APIs you want to call.
response_mode 推奨recommended 結果として得られたトークンをアプリに返す際に使用するメソッドを指定します。Specifies the method that should be used to send the resulting token back to your app. 以下のいずれかを指定できます。Can be one of the following:

- query
- fragment
- form_post

query はリダイレクト URI でクエリ文字列パラメーターとしてコードを提供します。query provides the code as a query string parameter on your redirect URI. 暗黙的フローを使って ID トークンを要求する場合、OpenID 仕様で規定された query を使用することはできません。コードのみを要求する場合は、queryfragmentform_post のいずれかを使用できます。If you're requesting an ID token using the implicit flow, you can't use query as specified in the OpenID spec. If you're requesting just the code, you can use query, fragment, or form_post. form_post は、リダイレクト URI に対するコードを含んだ POST を実行します。form_post executes a POST containing the code to your redirect URI. 詳細については、OpenID Connect プロトコルに関するページを参照してください。For more info, see OpenID Connect protocol.
state 推奨recommended 要求に含まれ、かつトークンの応答として返される値。A value included in the request that will also be returned in the token response. 任意の文字列を指定することができます。It can be a string of any content that you wish. クロスサイト リクエスト フォージェリ攻撃を防ぐために通常、ランダムに生成された一意の値が使用されます。A randomly generated unique value is typically used for preventing cross-site request forgery attacks. この値を使用すると、認証要求の前にアプリ内でユーザーの状態 (表示中のページやビューなど) に関する情報をエンコードすることもできます。The value can also encode information about the user's state in the app before the authentication request occurred, such as the page or view they were on.
prompt 省略可能optional ユーザーとの必要な対話の種類を指定します。Indicates the type of user interaction that is required. 現時点で有効な値は loginnoneconsent だけです。The only valid values at this time are login, none, and consent.

- prompt=login は、その要求でユーザーに資格情報の入力を強制し、シングル サインオンを無効にします。- prompt=login will force the user to enter their credentials on that request, negating single-sign on.
- prompt=none はその反対であり、ユーザーにどのような対話型プロンプトも表示されないようにします。- prompt=none is the opposite - it will ensure that the user isn't presented with any interactive prompt whatsoever. シングル サインオンで確認なしで要求を完了できない場合は、Microsoft ID プラットフォーム エンドポイントから interaction_required エラーが返されます。If the request can't be completed silently via single-sign on, the Microsoft identity platform endpoint will return an interaction_required error.
- prompt=consent では、ユーザーがサインインした後で OAuth 同意ダイアログが表示され、アプリへのアクセス許可の付与をユーザーに求めます。- prompt=consent will trigger the OAuth consent dialog after the user signs in, asking the user to grant permissions to the app.
login_hint 省略可能optional ユーザー名が事前にわかっている場合、ユーザーに代わって事前に、サインイン ページのユーザー名/電子メール アドレス フィールドに入力ができます。Can be used to pre-fill the username/email address field of the sign-in page for the user, if you know their username ahead of time. アプリはしばしば前回のサインインから preferred_username 要求を抽出して再認証時にこのパラメーターを使用します。Often apps will use this parameter during re-authentication, having already extracted the username from a previous sign-in using the preferred_username claim.
domain_hint 省略可能optional consumersorganizations のいずれかを指定できます。Can be one of consumers or organizations.

これが含まれていると、ユーザーがサインイン ページで実行する電子メール ベースの検出プロセスがスキップされ、多少効率化されたユーザー エクスペリエンスが提供されます。If included, it will skip the email-based discovery process that user goes through on the sign-in page, leading to a slightly more streamlined user experience. 多くの場合、アプリでは、前回のサインインから tid を抽出することで再認証時にこのパラメーターを使用します。Often apps will use this parameter during re-authentication, by extracting the tid from a previous sign-in. tid 要求の値が 9188040d-6c67-4c5b-b112-36a304b66dad の場合、domain_hint=consumers を使用する必要があります。If the tid claim value is 9188040d-6c67-4c5b-b112-36a304b66dad, you should use domain_hint=consumers. それ以外の場合は、 domain_hint=organizationsを指定します。Otherwise, use domain_hint=organizations.
code_challenge_method 省略可能optional code_challenge パラメーターの code_verifier をエンコードするために使用されるメソッド。The method used to encode the code_verifier for the code_challenge parameter. 次のいずれかの値を指定できます。Can be one of the following values:

- plain
- S256

除外されていると、code_challenge が含まれている場合、code_challenge はプレーンテキストであると見なされます。If excluded, code_challenge is assumed to be plaintext if code_challenge is included. Microsoft ID プラットフォームは plainS256 の両方をサポートします。Microsoft identity platform supports both plain and S256. 詳細については、「PKCE RFC」を参照してください。For more information, see the PKCE RFC.
code_challenge 省略可能optional ネイティブ クライアントからの PKCE (Proof Key for Code Exchange) を使用して承認コード付与をセキュリティ保護するために使用されます。Used to secure authorization code grants via Proof Key for Code Exchange (PKCE) from a native client. code_challenge_method が含まれている場合は必須です。Required if code_challenge_method is included. 詳細については、「PKCE RFC」を参照してください。For more information, see the PKCE RFC.

現時点では、ユーザーに資格情報の入力と認証が求められます。At this point, the user will be asked to enter their credentials and complete the authentication. Microsoft ID プラットフォーム エンドポイントではまた、ユーザーが scope クエリ パラメーターに示されたアクセス許可に同意していることも確認されます。The Microsoft identity platform endpoint will also ensure that the user has consented to the permissions indicated in the scope query parameter. いずれのアクセス許可にもユーザーが同意しなかった場合、必要なアクセス許可に同意するようユーザーに求めます。If the user has not consented to any of those permissions, it will ask the user to consent to the required permissions. アクセス許可、同意、マルチテナント アプリの詳細については、 こちらを参照してください。Details of permissions, consent, and multi-tenant apps are provided here.

ユーザーが認証し、同意を許可すると、Microsoft ID プラットフォーム エンドポイントは response_mode パラメーターで指定された方法を使用して、アプリの指定された redirect_uri に応答を返します。Once the user authenticates and grants consent, the Microsoft identity platform endpoint will return a response to your app at the indicated redirect_uri, using the method specified in the response_mode parameter.

成功応答Successful response

response_mode=query を使用した場合の正常な応答は次のようになります。A successful response using response_mode=query looks like:

GET https://login.microsoftonline.com/common/oauth2/nativeclient?
code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...
&state=12345
パラメーターParameter 説明Description
code アプリが要求した authorization_code。The authorization_code that the app requested. アプリは承認コードを使用して、対象リソースのアクセス トークンを要求します。The app can use the authorization code to request an access token for the target resource. 承認コードは有効期間が短く、通常 10 分後には期限切れとなります。Authorization_codes are short lived, typically they expire after about 10 minutes.
state 要求に state パラメーターが含まれている場合、同じ値が応答にも含まれることになります。If a state parameter is included in the request, the same value should appear in the response. 要求と応答に含まれる状態値が同一であることをアプリ側で確認する必要があります。The app should verify that the state values in the request and response are identical.

エラー応答Error response

アプリ側でエラーを適切に処理できるよう、 redirect_uri にはエラー応答も送信されます。Error responses may also be sent to the redirect_uri so the app can handle them appropriately:

GET https://login.microsoftonline.com/common/oauth2/nativeclient?
error=access_denied
&error_description=the+user+canceled+the+authentication
パラメーターParameter 説明Description
error 発生したエラーの種類を分類したりエラーに対処したりする際に使用するエラー コード文字列。An error code string that can be used to classify types of errors that occur, and can be used to react to errors.
error_description 認証エラーの根本的な原因を開発者が特定しやすいように記述した具体的なエラー メッセージ。A specific error message that can help a developer identify the root cause of an authentication error.

承認エンドポイント エラーのエラー コードError codes for authorization endpoint errors

次の表で、エラー応答の error パラメーターで返される可能性のあるさまざまなエラー コードを説明します。The following table describes the various error codes that can be returned in the error parameter of the error response.

エラー コードError Code 説明Description クライアント側の処理Client Action
invalid_request 必要なパラメーターが不足しているなどのプロトコル エラーです。Protocol error, such as a missing required parameter. 要求を修正し再送信します。Fix and resubmit the request. これは、開発エラーであり、通常は初期テスト中に発生します。This is a development error typically caught during initial testing.
unauthorized_client クライアント アプリケーションは、承認コードの要求を許可されていません。The client application isn't permitted to request an authorization code. 通常、このエラーは、クライアント アプリケーションが Azure AD に登録されていない、またはユーザーの Azure AD テナントに追加されていないときに発生します。This error usually occurs when the client application isn't registered in Azure AD or isn't added to the user's Azure AD tenant. アプリケーションでは、アプリケーションのインストールと Azure AD への追加を求める指示をユーザーに表示できます。The application can prompt the user with instruction for installing the application and adding it to Azure AD.
access_denied リソースの所有者が同意を拒否しました。Resource owner denied consent クライアント アプリケーションは、ユーザーが同意しないと続行できないことを、ユーザーに通知できます。The client application can notify the user that it can't proceed unless the user consents.
unsupported_response_type 承認サーバーは要求に含まれる応答の種類をサポートしていません。The authorization server does not support the response type in the request. 要求を修正し再送信します。Fix and resubmit the request. これは、開発エラーであり、通常は初期テスト中に発生します。This is a development error typically caught during initial testing.
server_error サーバーで予期しないエラーが発生しました。The server encountered an unexpected error. 要求をやり直してください。Retry the request. これらのエラーは一時的な状況によって発生します。These errors can result from temporary conditions. クライアント アプリケーションは、一時的なエラーのため応答が遅れることをユーザーに説明する場合があります。The client application might explain to the user that its response is delayed to a temporary error.
temporarily_unavailable サーバーが一時的にビジー状態であるため、要求を処理できません。The server is temporarily too busy to handle the request. 要求をやり直してください。Retry the request. クライアント アプリケーションは、一時的な状況が原因で応答が遅れることをユーザーに説明する場合があります。The client application might explain to the user that its response is delayed because of a temporary condition.
invalid_resource 対象のリソースは、存在しない、Azure AD が見つけられない、または正しく構成されていないために無効です。The target resource is invalid because it does not exist, Azure AD can't find it, or it's not correctly configured. このエラーは、リソース (存在する場合) がテナントで構成されていないことを示します。This error indicates the resource, if it exists, has not been configured in the tenant. アプリケーションでは、アプリケーションのインストールと Azure AD への追加を求める指示をユーザーに表示できます。The application can prompt the user with instruction for installing the application and adding it to Azure AD.
login_required ユーザーが多すぎるか、見つかりませんToo many or no users found クライアントからサイレント認証が要求されましたが (prompt=none)、ユーザーは 1 つも見つかりませんでした。The client requested silent authentication (prompt=none), but a single user could not found. これは、セッションで複数のユーザーがアクティブになっているか、ユーザーがないことを意味する可能性があります。This may mean there are multiple users active in the session, or no users. このとき、選択されたテナントが考慮されます (たとえば、Azure AD アカウントが 2 つアクティブになっているか、Microsoft アカウントが 1 つあるかが考慮されます。consumers が選択されている場合はサイレント認証は機能します)。This takes into account the tenant chosen (for example, if there are two Azure AD accounts active and one Microsoft account, and consumers is chosen, silent authentication will work).
interaction_required 要求にユーザーの介入が必要です。The request requires user interaction. 追加の認証手順か同意が必要になります。An additional authentication step or consent is required. prompt=none なしで要求を再試行してください。Retry the request without prompt=none.

アクセス トークンを要求するRequest an access token

authorization_code を取得し、ユーザーからアクセス許可を得たら、access_tokencode を目的のリソースに対して使うことができます。Now that you've acquired an authorization_code and have been granted permission by the user, you can redeem the code for an access_token to the desired resource. これを行うには、POST 要求を /token エンドポイントに送信します。Do this by sending a POST request to the /token endpoint:

// Line breaks for legibility only

POST /{tenant}/oauth2/v2.0/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&scope=https%3A%2F%2Fgraph.microsoft.com%2Fuser.read
&code=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq3n8b2JRLk4OxVXr...
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&grant_type=authorization_code
&client_secret=JqQX2PNo9bpM0uEihUPzyrh    // NOTE: Only required for web apps

ヒント

を必ず置き換えてください)。Try executing this request in Postman! (code を置き換えるのを忘れないでください) Postman でこの要求を実行してみる(Don't forget to replace the code) Try running this request in Postman

パラメーターParameter 必須/省略可能Required/optional 説明Description
tenant 必須required 要求パスの {tenant} の値を使用して、アプリケーションにサインインできるユーザーを制御します。The {tenant} value in the path of the request can be used to control who can sign into the application. 使用できる値は、commonorganizationsconsumers およびテナント識別子です。The allowed values are common, organizations, consumers, and tenant identifiers. 詳細については、 プロトコルの基礎に関するページを参照してください。For more detail, see protocol basics.
client_id 必須required Azure portal の [アプリの登録] ページでアプリに割り当てられたアプリケーション (クライアント) ID。The Application (client) ID that the Azure portal – App registrations page assigned to your app.
grant_type 必須required 承認コード フローでは authorization_code を指定する必要があります。Must be authorization_code for the authorization code flow.
scope 必須required スコープのスペース区切りリスト。A space-separated list of scopes. この段階で要求するスコープは、最初の段階で要求したスコープと同じか、またはそのサブセットである必要があります。The scopes requested in this leg must be equivalent to or a subset of the scopes requested in the first leg. このスコープはすべて、OIDC スコープ (profileopenidemail) に沿って、1 つのリソースからである必要があります。The scopes must all be from a single resource, along with OIDC scopes (profile, openid, email). スコープの詳細については、 アクセス許可、同意、スコープに関するページを参照してください。For a more detailed explanation of scopes, refer to permissions, consent, and scopes.
code 必須required フローの最初の段階で取得した authorization_code。The authorization_code that you acquired in the first leg of the flow.
redirect_uri 必須required authorization_code の取得に使用された同じ redirect_uri 値。The same redirect_uri value that was used to acquire the authorization_code.
client_secret Web アプリの場合は必須required for web apps アプリ登録ポータルで作成した、アプリケーションのシークレット。The application secret that you created in the app registration portal for your app. client_secret をデバイスに確実に保存することはできないため、ネイティブ アプリではアプリケーションのシークレットを使用しないでください。You shouldn't use the application secret in a native app because client_secrets can't be reliably stored on devices. Web アプリや Web API では client_secret をサーバー側で安全に保存する機能が備わっており、必ず指定する必要があります。It's required for web apps and web APIs, which have the ability to store the client_secret securely on the server side. クライアント シークレットは、送信前に URL エンコードされる必要があります。The client secret must be URL-encoded before being sent.
code_verifier 省略可能optional authorization_code を取得するために使用されたのと同じ code_verifier。The same code_verifier that was used to obtain the authorization_code. 承認コード付与要求で PKCE が使用された場合は必須です。Required if PKCE was used in the authorization code grant request. 詳細については、「PKCE RFC」を参照してください。For more information, see the PKCE RFC.

成功応答Successful response

正常なトークン応答は次のようになります。A successful token response will look like:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "token_type": "Bearer",
    "expires_in": 3599,
    "scope": "https%3A%2F%2Fgraph.microsoft.com%2Fuser.read",
    "refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
    "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD...",
}
パラメーターParameter 説明Description
access_token 要求されたアクセス トークン。The requested access token. アプリはこのトークンを使用して、保護されたリソース (Web API など) に対し、本人性を証明することができます。The app can use this token to authenticate to the secured resource, such as a web API.
token_type トークン タイプ値を指定します。Indicates the token type value. Azure AD でサポートされるのは Bearer タイプのみです。The only type that Azure AD supports is Bearer
expires_in アクセス トークンの有効期間 (秒)。How long the access token is valid (in seconds).
scope access_token が有効である範囲。The scopes that the access_token is valid for.
refresh_token OAuth 2.0 更新トークン。An OAuth 2.0 refresh token. 現在のアクセス トークンの有効期限が切れた後、アプリはこのトークンを使用して、追加のアクセス トークンを取得します。The app can use this token acquire additional access tokens after the current access token expires. Refresh_token は有効期間が長く、リソースへのアクセスを長時間保持するときに利用できます。Refresh_tokens are long-lived, and can be used to retain access to resources for extended periods of time. アクセス トークンの更新の詳細については、後述のセクションを参照してください。For more detail on refreshing an access token, refer to the section below.
注: offline_access スコープが要求された場合のみ提供されます。Note: Only provided if offline_access scope was requested.
id_token JSON Web トークン (JWT)。A JSON Web Token (JWT). アプリは、このトークンのセグメントをデコードすることによって、サインインしたユーザーに関する情報を要求することができます。The app can decode the segments of this token to request information about the user who signed in. この値をキャッシュして表示することはできますが、承認やセキュリティ境界の用途でこの値に依存することは避けてください。The app can cache the values and display them, but it should not rely on them for any authorization or security boundaries. id_token の詳細については、id_token referenceを参照してください。For more information about id_tokens, see the id_token reference.
注: openid スコープが要求された場合のみ提供されます。Note: Only provided if openid scope was requested.

エラー応答Error response

エラー応答は次のようになります。Error responses will look like:

{
  "error": "invalid_scope",
  "error_description": "AADSTS70011: The provided value for the input parameter 'scope' is not valid. The scope https://foo.microsoft.com/mail.read is not valid.\r\nTrace ID: 255d1aef-8c98-452f-ac51-23d051240864\r\nCorrelation ID: fb3d2015-bc17-4bb9-bb85-30c5cf1aaaa7\r\nTimestamp: 2016-01-09 02:02:12Z",
  "error_codes": [
    70011
  ],
  "timestamp": "2016-01-09 02:02:12Z",
  "trace_id": "255d1aef-8c98-452f-ac51-23d051240864",
  "correlation_id": "fb3d2015-bc17-4bb9-bb85-30c5cf1aaaa7"
}
パラメーターParameter 説明Description
error 発生したエラーの種類を分類したりエラーに対処したりする際に使用するエラー コード文字列。An error code string that can be used to classify types of errors that occur, and can be used to react to errors.
error_description 認証エラーの根本的な原因を開発者が特定しやすいように記述した具体的なエラー メッセージ。A specific error message that can help a developer identify the root cause of an authentication error.
error_codes 診断に役立つ STS 固有のエラー コードの一覧。A list of STS-specific error codes that can help in diagnostics.
timestamp エラーが発生した時刻。The time at which the error occurred.
trace_id 診断に役立つ、要求の一意の識別子。A unique identifier for the request that can help in diagnostics.
correlation_id コンポーネント間での診断に役立つ、要求の一意の識別子。A unique identifier for the request that can help in diagnostics across components.

トークン エンドポイント エラーのエラー コードError codes for token endpoint errors

エラー コードError Code 説明Description クライアント側の処理Client Action
invalid_request 必要なパラメーターが不足しているなどのプロトコル エラーです。Protocol error, such as a missing required parameter. 要求を修正し再送信します。Fix and resubmit the request
invalid_grant 承認コードまたは PKCE コード検証機能が無効か、有効期限切れです。The authorization code or PKCE code verifier is invalid or has expired. /authorize エンドポイントに対する新しい要求を試し、code_verifier パラメーターが正しいことを確認します。Try a new request to the /authorize endpoint and verify that the code_verifier parameter was correct.
unauthorized_client 認証されたクライアントは、この承認付与の種類を使用する権限がありません。The authenticated client isn't authorized to use this authorization grant type. これは、通常、クライアント アプリケーションが Azure AD に登録されていない、またはユーザーの Azure AD テナントに追加されていないときに発生します。This usually occurs when the client application isn't registered in Azure AD or isn't added to the user's Azure AD tenant. アプリケーションでは、アプリケーションのインストールと Azure AD への追加を求める指示をユーザーに表示できます。The application can prompt the user with instruction for installing the application and adding it to Azure AD.
invalid_client クライアント認証に失敗しました。Client authentication failed. クライアント資格情報が有効ではありません。The client credentials aren't valid. 修正するには、アプリケーション管理者が資格情報を更新します。To fix, the application administrator updates the credentials.
unsupported_grant_type 承認サーバーが承認付与の種類をサポートしていません。The authorization server does not support the authorization grant type. 要求の付与の種類を変更します。Change the grant type in the request. この種のエラーは、開発時にのみ発生し、初期テスト中に検出する必要があります。This type of error should occur only during development and be detected during initial testing.
invalid_resource 対象のリソースは、存在しない、Azure AD が見つけられない、または正しく構成されていないために無効です。The target resource is invalid because it does not exist, Azure AD can't find it, or it's not correctly configured. これは、リソース (存在する場合) がテナントで構成されていないことを示します。This indicates the resource, if it exists, has not been configured in the tenant. アプリケーションでは、アプリケーションのインストールと Azure AD への追加を求める指示をユーザーに表示できます。The application can prompt the user with instruction for installing the application and adding it to Azure AD.
interaction_required 要求にユーザーの介入が必要です。The request requires user interaction. たとえば、追加の認証手順が必要です。For example, an additional authentication step is required. 同じリソースで要求を再試行します。Retry the request with the same resource.
temporarily_unavailable サーバーが一時的にビジー状態であるため、要求を処理できません。The server is temporarily too busy to handle the request. 要求をやり直してください。Retry the request. クライアント アプリケーションは、一時的な状況が原因で応答が遅れることをユーザーに説明する場合があります。The client application might explain to the user that its response is delayed because of a temporary condition.

アクセス トークンを使用するUse the access token

access_token を無事取得したら、そのトークンを Authorization ヘッダーに追加することによって、Web API への要求に使用することができます。Now that you've successfully acquired an access_token, you can use the token in requests to Web APIs by including it in the Authorization header:

ヒント

ヘッダーを置き換えてください)。Execute this request in Postman! (まず Authorization ヘッダーを置き換えます) Postman でこの要求を実行してみる(Replace the Authorization header first) Try running this request in Postman

GET /v1.0/me/messages
Host: https://graph.microsoft.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...

アクセス トークンを更新するRefresh the access token

アクセス トークンは有効期間が短く、期限が切れた後もリソースにアクセスし続けるためにはトークンを更新する必要があります。Access_tokens are short lived, and you must refresh them after they expire to continue accessing resources. アクセス トークンを更新するには、もう一度 POST 要求を /token エンドポイントに送信します。このとき、code の代わりに refresh_token を指定します。You can do so by submitting another POST request to the /token endpoint, this time providing the refresh_token instead of the code. 更新トークンは、クライアントが既に同意を受け取っているすべてのアクセス許可に対して有効です。そのため、scope=mail.read に対する要求で発行された更新トークンを使用して、scope=api://contoso.com/api/UseResource に対する新しいアクセス トークンを要求できます。Refresh tokens are valid for all permissions that your client has already received consent for - thus, a refresh token issued on a request for scope=mail.read can be used to request a new access token for scope=api://contoso.com/api/UseResource.

更新トークンには、指定された有効期間はありません。Refresh tokens do not have specified lifetimes. 通常、更新トークンの有効期間は比較的長いです。Typically, the lifetimes of refresh tokens are relatively long. ただし、場合によっては、更新トークンの有効期限が切れる、失効する、または目的の操作のための十分な特権がないことがあります。However, in some cases, refresh tokens expire, are revoked, or lack sufficient privileges for the desired action. クライアント アプリケーションは、トークン発行エンドポイントから返されるエラーを予期して正しく処理する必要があります。Your application needs to expect and handle errors returned by the token issuance endpoint correctly.

新しいアクセス トークンを取得するために使用されたときに、更新トークンが失効していないにもかかわらず、古い更新トークンを破棄することを求められます。Although refresh tokens aren't revoked when used to acquire new access tokens, you are expected to discard the old refresh token. OAuth 2.0 仕様には次のようにあります。"承認サーバーで新しい更新トークンが発行される場合があります。この場合、クライアントは古い更新トークンを破棄し、新しい更新トークンに置き換える必要があります。The OAuth 2.0 spec says: "The authorization server MAY issue a new refresh token, in which case the client MUST discard the old refresh token and replace it with the new refresh token. 承認サーバーは新しい更新トークンをクライアントに発行した後に、古い更新トークンを取り消す場合があります。"The authorization server MAY revoke the old refresh token after issuing a new refresh token to the client."

// Line breaks for legibility only

POST /{tenant}/oauth2/v2.0/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&scope=https%3A%2F%2Fgraph.microsoft.com%2Fuser.read
&refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
&grant_type=refresh_token
&client_secret=JqQX2PNo9bpM0uEihUPzyrh      // NOTE: Only required for web apps

ヒント

を必ず置き換えてください)。Try executing this request in Postman! (refresh_token を置き換えるのを忘れないでください) Postman でこの要求を実行してみる(Don't forget to replace the refresh_token) Try running this request in Postman

パラメーターParameter 説明Description
tenant 必須required 要求パスの {tenant} の値を使用して、アプリケーションにサインインできるユーザーを制御します。The {tenant} value in the path of the request can be used to control who can sign into the application. 使用できる値は、commonorganizationsconsumers およびテナント識別子です。The allowed values are common, organizations, consumers, and tenant identifiers. 詳細については、 プロトコルの基礎に関するページを参照してください。For more detail, see protocol basics.
client_id 必須required Azure portal の [アプリの登録] エクスペリエンスでアプリに割り当てられたアプリケーション (クライアント) IDThe Application (client) ID that the Azure portal – App registrations experience assigned to your app.
grant_type 必須required この段階の承認コード フローでは refresh_token を指定する必要があります。Must be refresh_token for this leg of the authorization code flow.
scope 必須required スコープのスペース区切りリスト。A space-separated list of scopes. この段階で要求するスコープは、最初の承認コード要求段階で要求したスコープと同じか、またはそのサブセットである必要があります。The scopes requested in this leg must be equivalent to or a subset of the scopes requested in the original authorization_code request leg. この要求で指定したスコープが複数のリソース サーバーにまたがる場合、Microsoft ID プラットフォーム エンドポイントからは、最初のスコープで指定したリソースのトークンが返されます。If the scopes specified in this request span multiple resource server, then the Microsoft identity platform endpoint will return a token for the resource specified in the first scope. スコープの詳細については、 アクセス許可、同意、スコープに関するページを参照してください。For a more detailed explanation of scopes, refer to permissions, consent, and scopes.
refresh_token 必須required フローの第 2 段階で取得した refresh_token。The refresh_token that you acquired in the second leg of the flow.
client_secret Web アプリの場合は必須required for web apps アプリ登録ポータルで作成した、アプリケーションのシークレット。The application secret that you created in the app registration portal for your app. ネイティブ アプリでは使用しないでください。デバイスに client_secret を確実に保存することができません。It should not be used in a native app, because client_secrets can't be reliably stored on devices. Web アプリや Web API では client_secret をサーバー側で安全に保存する機能が備わっており、必ず指定する必要があります。It's required for web apps and web APIs, which have the ability to store the client_secret securely on the server side.

成功応答Successful response

正常なトークン応答は次のようになります。A successful token response will look like:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "token_type": "Bearer",
    "expires_in": 3599,
    "scope": "https%3A%2F%2Fgraph.microsoft.com%2Fuser.read",
    "refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
    "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD...",
}
パラメーターParameter 説明Description
access_token 要求されたアクセス トークン。The requested access token. アプリはこのトークンを使用して、保護されたリソース (Web API など) に対し、本人性を証明することができます。The app can use this token to authenticate to the secured resource, such as a web API.
token_type トークン タイプ値を指定します。Indicates the token type value. Azure AD でサポートされるのは Bearer タイプのみです。The only type that Azure AD supports is Bearer
expires_in アクセス トークンの有効期間 (秒)。How long the access token is valid (in seconds).
scope access_token が有効である範囲。The scopes that the access_token is valid for.
refresh_token 新しい OAuth 2.0 更新トークン。A new OAuth 2.0 refresh token. できるだけ長い時間、更新トークンを有効な状態に維持するためには、この新しく取得した更新トークンで古い更新トークンを置き換える必要があります。You should replace the old refresh token with this newly acquired refresh token to ensure your refresh tokens remain valid for as long as possible.
注: offline_access スコープが要求された場合のみ提供されます。Note: Only provided if offline_access scope was requested.
id_token 無署名の JSON Web トークン (JWT)。An unsigned JSON Web Token (JWT). アプリは、このトークンのセグメントをデコードすることによって、サインインしたユーザーに関する情報を要求することができます。The app can decode the segments of this token to request information about the user who signed in. この値をキャッシュして表示することはできますが、承認やセキュリティ境界の用途でこの値に依存することは避けてください。The app can cache the values and display them, but it should not rely on them for any authorization or security boundaries. id_token の詳細については、id_token referenceを参照してください。For more information about id_tokens, see the id_token reference.
注: openid スコープが要求された場合のみ提供されます。Note: Only provided if openid scope was requested.

エラー応答Error response

{
  "error": "invalid_scope",
  "error_description": "AADSTS70011: The provided value for the input parameter 'scope' is not valid. The scope https://foo.microsoft.com/mail.read is not valid.\r\nTrace ID: 255d1aef-8c98-452f-ac51-23d051240864\r\nCorrelation ID: fb3d2015-bc17-4bb9-bb85-30c5cf1aaaa7\r\nTimestamp: 2016-01-09 02:02:12Z",
  "error_codes": [
    70011
  ],
  "timestamp": "2016-01-09 02:02:12Z",
  "trace_id": "255d1aef-8c98-452f-ac51-23d051240864",
  "correlation_id": "fb3d2015-bc17-4bb9-bb85-30c5cf1aaaa7"
}
パラメーターParameter 説明Description
error 発生したエラーの種類を分類したりエラーに対処したりする際に使用するエラー コード文字列。An error code string that can be used to classify types of errors that occur, and can be used to react to errors.
error_description 認証エラーの根本的な原因を開発者が特定しやすいように記述した具体的なエラー メッセージ。A specific error message that can help a developer identify the root cause of an authentication error.
error_codes 診断に役立つ STS 固有のエラー コードの一覧。A list of STS-specific error codes that can help in diagnostics.
timestamp エラーが発生した時刻。The time at which the error occurred.
trace_id 診断に役立つ、要求の一意の識別子。A unique identifier for the request that can help in diagnostics.
correlation_id コンポーネント間での診断に役立つ、要求の一意の識別子。A unique identifier for the request that can help in diagnostics across components.

エラー コードとクライアントに推奨される対処法については、「トークン エンドポイント エラーのエラー コード」を参照してください。For a description of the error codes and the recommended client action, see Error codes for token endpoint errors.