Microsoft ID プラットフォームの ID トークンMicrosoft identity platform ID tokens

id_tokens は、OpenID Connect フローの中でクライアント アプリケーションに送信されます。id_tokens are sent to the client application as part of an OpenID Connect flow. これは、アクセス トークンと一緒に、またはアクセス トークンのかわりに送信することができ、ユーザーを認証するためにクライアントによって使用されます。They can be sent along side or instead of an access token, and are used by the client to authenticate the user.

id_token を使用するUsing the id_token

ID トークンは、ユーザーが本人の主張どおりの人物であることを検証し、ユーザーについてその他の役に立つ情報を取得するために使用されます。アクセス トークンの代わりに、承認のために使用してはなりません。ID Tokens should be used to validate that a user is who they claim to be and get additional useful information about them - it shouldn't be used for authorization in place of an access token. これによって提供される要求は、アプリケーション内の UX でデータベースのキーとして使用でき、クライアント アプリケーションへのアクセスが提供されます。The claims it provides can be used for UX inside your application, as keys in a database, and providing access to the client application. データベースのキーを作成するときは、ゲスト シナリオが乱雑になるため、idp は使用しないでください。When creating keys for a database, idp should not be used because it messes up guest scenarios. キーの処理は sub (常に一意) のみで実行する必要があり、必要に応じてルーティングのために tid が使用されます。Keying should be done on sub alone (which is always unique), with tid used for routing if need be. サービス間でデータを共有する必要がある場合、複数のサービスで同じ oid が取得されるため、oid + sub + tid で機能します。If you need to share data across services, oid+sub+tid will work since multiple services all get the same oid.

id_token の要求Claims in an id_token

Microsoft Identity のid_tokensJWT です。つまり、ヘッダー、ペイロードおよび署名の部分から構成されます。id_tokens for a Microsoft identity are JWTs, meaning they consist of a header, payload, and signature portion. ヘッダーと署名を使用して、トークンの信頼性を確認できます。ペイロードには、クライアントによって要求されたユーザーの情報が含まれます。You can use the header and signature to verify the authenticity of the token, while the payload contains the information about the user requested by your client. 特に明記しない限り、ここに示すすべての要求は v1.0 と v2.0 両方のトークンに出現します。Except where noted, all claims listed here appear in both v1.0 and v2.0 tokens.

v1.0v1.0

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IjdfWnVmMXR2a3dMeFlhSFMzcTZsVWpVWUlHdyIsImtpZCI6IjdfWnVmMXR2a3dMeFlhSFMzcTZsVWpVWUlHdyJ9.eyJhdWQiOiJiMTRhNzUwNS05NmU5LTQ5MjctOTFlOC0wNjAxZDBmYzljYWEiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC9mYTE1ZDY5Mi1lOWM3LTQ0NjAtYTc0My0yOWYyOTU2ZmQ0MjkvIiwiaWF0IjoxNTM2Mjc1MTI0LCJuYmYiOjE1MzYyNzUxMjQsImV4cCI6MTUzNjI3OTAyNCwiYWlvIjoiQVhRQWkvOElBQUFBcXhzdUIrUjREMnJGUXFPRVRPNFlkWGJMRDlrWjh4ZlhhZGVBTTBRMk5rTlQ1aXpmZzN1d2JXU1hodVNTajZVVDVoeTJENldxQXBCNWpLQTZaZ1o5ay9TVTI3dVY5Y2V0WGZMT3RwTnR0Z2s1RGNCdGsrTExzdHovSmcrZ1lSbXY5YlVVNFhscGhUYzZDODZKbWoxRkN3PT0iLCJhbXIiOlsicnNhIl0sImVtYWlsIjoiYWJlbGlAbWljcm9zb2Z0LmNvbSIsImZhbWlseV9uYW1lIjoiTGluY29sbiIsImdpdmVuX25hbWUiOiJBYmUiLCJpZHAiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC83MmY5ODhiZi04NmYxLTQxYWYtOTFhYi0yZDdjZDAxMWRiNDcvIiwiaXBhZGRyIjoiMTMxLjEwNy4yMjIuMjIiLCJuYW1lIjoiYWJlbGkiLCJub25jZSI6IjEyMzUyMyIsIm9pZCI6IjA1ODMzYjZiLWFhMWQtNDJkNC05ZWMwLTFiMmJiOTE5NDQzOCIsInJoIjoiSSIsInN1YiI6IjVfSjlyU3NzOC1qdnRfSWN1NnVlUk5MOHhYYjhMRjRGc2dfS29vQzJSSlEiLCJ0aWQiOiJmYTE1ZDY5Mi1lOWM3LTQ0NjAtYTc0My0yOWYyOTU2ZmQ0MjkiLCJ1bmlxdWVfbmFtZSI6IkFiZUxpQG1pY3Jvc29mdC5jb20iLCJ1dGkiOiJMeGVfNDZHcVRrT3BHU2ZUbG40RUFBIiwidmVyIjoiMS4wIn0=.UJQrCA6qn2bXq57qzGX_-D3HcPHqBMOKDPx4su1yKRLNErVD8xkxJLNLVRdASHqEcpyDctbdHccu6DPpkq5f0ibcaQFhejQNcABidJCTz0Bb2AbdUCTqAzdt9pdgQvMBnVH1xk3SCM6d4BbT4BkLLj10ZLasX7vRknaSjE_C5DI7Fg4WrZPwOhII1dB0HEZ_qpNaYXEiy-o94UJ94zCr07GgrqMsfYQqFR7kn-mn68AjvLcgwSfZvyR_yIK75S_K37vC3QryQ7cNoafDe9upql_6pB2ybMVlgWPs_DmbJ8g0om-sPlwyn74Cc1tW3ze-Xptw_2uVdPgWyqfuWAfq6Q

この v1.0 のサンプル トークンは jwt.ms で表示できます。View this v1.0 sample token in jwt.ms.

v2.0v2.0

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjFMVE16YWtpaGlSbGFfOHoyQkVKVlhlV01xbyJ9.eyJ2ZXIiOiIyLjAiLCJpc3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vOTEyMjA0MGQtNmM2Ny00YzViLWIxMTItMzZhMzA0YjY2ZGFkL3YyLjAiLCJzdWIiOiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFJa3pxRlZyU2FTYUZIeTc4MmJidGFRIiwiYXVkIjoiNmNiMDQwMTgtYTNmNS00NmE3LWI5OTUtOTQwYzc4ZjVhZWYzIiwiZXhwIjoxNTM2MzYxNDExLCJpYXQiOjE1MzYyNzQ3MTEsIm5iZiI6MTUzNjI3NDcxMSwibmFtZSI6IkFiZSBMaW5jb2xuIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiQWJlTGlAbWljcm9zb2Z0LmNvbSIsIm9pZCI6IjAwMDAwMDAwLTAwMDAtMDAwMC02NmYzLTMzMzJlY2E3ZWE4MSIsInRpZCI6IjkxMjIwNDBkLTZjNjctNGM1Yi1iMTEyLTM2YTMwNGI2NmRhZCIsIm5vbmNlIjoiMTIzNTIzIiwiYWlvIjoiRGYyVVZYTDFpeCFsTUNXTVNPSkJjRmF0emNHZnZGR2hqS3Y4cTVnMHg3MzJkUjVNQjVCaXN2R1FPN1lXQnlqZDhpUURMcSFlR2JJRGFreXA1bW5PcmNkcUhlWVNubHRlcFFtUnA2QUlaOGpZIn0.1AFWW-Ck5nROwSlltm7GzZvDwUkqvhSQpm55TQsmVo9Y59cLhRXpvB8n-55HCr9Z6G_31_UbeUkoz612I2j_Sm9FFShSDDjoaLQr54CreGIJvjtmS3EkK9a7SJBbcpL1MpUtlfygow39tFjY7EVNW9plWUvRrTgVk7lYLprvfzw-CIqw3gHC-T7IK_m_xkr08INERBtaecwhTeN4chPC4W3jdmw_lIxzC48YoQ0dB1L9-ImX98Egypfrlbm0IBL5spFzL6JDZIRRJOu8vecJvj1mq-IUhGt0MacxX8jdxYLP-KUu2d9MbNKpCKJuZ7p8gwTL5B7NlUdh_dmSviPWrw

この v2.0 のサンプル トークンは jwt.ms で表示できます。View this v2.0 sample token in jwt.ms.

ヘッダーのクレームHeader claims

要求Claim 形式Format 説明Description
typ 文字列 - 常に "JWT"String - always "JWT" トークンが JWT であることを示します。Indicates that the token is a JWT.
alg stringString トークンの署名に使用されたアルゴリズムを示します。Indicates the algorithm that was used to sign the token. 例:"RS256"Example: "RS256"
kid stringString このトークンの署名に使用される公開キーの拇印。Thumbprint for the public key used to sign this token. v1.0 および v2.0 の id_tokens で生成されます。Emitted in both v1.0 and v2.0 id_tokens.
x5t stringString kid と同様 (使用方法および値)。The same (in use and value) as kid. ただし、これは、互換性のために v1.0 id_tokensでのみ生成される従来の要求です。However, this is a legacy claim emitted only in v1.0 id_tokens for compatibility purposes.

ペイロードのクレームPayload claims

この一覧には、(明記されている場合を除き) 既定でほとんどの id_token に含まれる要求が示されます。This list shows the claims that are in most id_tokens by default (except where noted). ただし、アプリは、省略可能な要求を使用して、id_token で追加の要求を要求することができます。However, your app can use optional claims to request additional claims in the id_token. これらは、groups 要求から、ユーザーの名前に関する情報にまで及ぶ場合があります。These can range from the groups claim to information about the user's name.

要求Claim 形式Format 説明Description
aud 文字列、アプリケーション ID/URIString, an App ID URI トークンの受信者を示します。Identifies the intended recipient of the token. id_tokensでは、対象の受信者は Azure portal でアプリに割り当てられたアプリのアプリケーション ID です。In id_tokens, the audience is your app's Application ID, assigned to your app in the Azure portal. アプリでは、この値を検証し、値が一致しない場合はトークンを拒否する必要があります。Your app should validate this value, and reject the token if the value does not match.
iss 文字列、STS URIString, an STS URI トークンを作成して返したセキュリティ トークン サービス (STS)、およびユーザーが認証された Azure AD テナントを示します。Identifies the security token service (STS) that constructs and returns the token, and the Azure AD tenant in which the user was authenticated. トークンが v2.0 エンドポイントによって発行された場合、URI の末尾は /v2.0 になります。If the token was issued by the v2.0 endpoint, the URI will end in /v2.0. ユーザーが Microsoft アカウントを持つコンシューマー ユーザーであることを示す GUID は 9188040d-6c67-4c5b-b112-36a304b66dad です。The GUID that indicates that the user is a consumer user from a Microsoft account is 9188040d-6c67-4c5b-b112-36a304b66dad. 要求の GUID 部分を使用して、アプリにサインインできるテナントのセットを制限します (該当する場合)。Your app should use the GUID portion of the claim to restrict the set of tenants that can sign in to the app, if applicable.
iat int、UNIX タイムスタンプint, a UNIX timestamp "Issued At" は、このトークンの認証がいつ行われたのかを示します。"Issued At" indicates when the authentication for this token occurred.
idp 文字列 (通常は STS URI)String, usually an STS URI トークンのサブジェクトを認証した ID プロバイダーを記録します。Records the identity provider that authenticated the subject of the token. この値は、発行者とテナントが異なるユーザー アカウント (たとえばゲスト) の場合を除いて、発行者クレームの値と同じです。This value is identical to the value of the Issuer claim unless the user account not in the same tenant as the issuer - guests, for instance. クレームが存在しない場合は、代わりに iss の値を使用できることを示しています。If the claim isn't present, it means that the value of iss can be used instead. 個人用アカウントが組織のコンテキストで使用されている場合 (たとえば、個人用アカウントが Azure AD テナントに招待された場合)、idp 要求は 'live.com' または Microsoft アカウント テナント 9188040d-6c67-4c5b-b112-36a304b66dad を含む STS URI である可能性があります。For personal accounts being used in an organizational context (for instance, a personal account invited to an Azure AD tenant), the idp claim may be 'live.com' or an STS URI containing the Microsoft account tenant 9188040d-6c67-4c5b-b112-36a304b66dad.
nbf int、UNIX タイムスタンプint, a UNIX timestamp "nbf" (指定時刻よりも後) 要求では、指定した時刻よりも後に JWT の処理を受け入れることができるようになります。The "nbf" (not before) claim identifies the time before which the JWT MUST NOT be accepted for processing.
exp int、UNIX タイムスタンプint, a UNIX timestamp "exp" (有効期限) 要求は、JWT の処理を受け入れることができなくなる時刻を指定します。The "exp" (expiration time) claim identifies the expiration time on or after which the JWT MUST NOT be accepted for processing. この時刻よりも前でも、リソースによってトークンが拒否される可能性があることに注意してください。たとえば、認証での変更が必要な場合や、トークンの取り消しが検出された場合です。It's important to note that a resource may reject the token before this time as well - if, for example, a change in authentication is required or a token revocation has been detected.
c_hash stringString コード ハッシュは、ID トークンが OAuth 2.0 認証コードと共に発行される場合にのみ、ID トークンに含まれます。The code hash is included in ID tokens only when the ID token is issued with an OAuth 2.0 authorization code. これを使用して、認証コードの信頼性を検証できます。It can be used to validate the authenticity of an authorization code. この検証の実行の詳細については、OpenID Connect の仕様 を参照してください。For details about performing this validation, see the OpenID Connect specification.
at_hash stringString アクセス トークン ハッシュは、ID トークンが OAuth 2.0 アクセス トークンと共に発行される場合にのみ、ID トークンに含まれます。The access token hash is included in ID tokens only when the ID token is issued with an OAuth 2.0 access token. これを使用して、アクセス トークンの信頼性を検証できます。It can be used to validate the authenticity of an access token. この検証の実行の詳細については、OpenID Connect の仕様 を参照してください。For details about performing this validation, see the OpenID Connect specification.
aio 不透明な文字列Opaque String Azure AD がトークン再利用のためにデータの記録に使用する内部の要求。An internal claim used by Azure AD to record data for token reuse. 無視してください。Should be ignored.
preferred_username stringString ユーザーを表すプライマリ ユーザー名です。The primary username that represents the user. 電子メール アドレス、電話番号、または指定された書式のない一般的なユーザー名を指定できます。It could be an email address, phone number, or a generic username without a specified format. その値は、変更可能であり、時間の経過と共に変化することがあります。Its value is mutable and might change over time. これは変更可能であるため、この値は、承認の決定には使用できません。Since it is mutable, this value must not be used to make authorization decisions. この要求を受け取るには、 profile スコープが必要です。The profile scope is required to receive this claim.
email stringString email 要求は、電子メール アドレスを持つゲスト アカウントに対して既定で使用されます。The email claim is present by default for guest accounts that have an email address. アプリでは、オプション要求 email を使用して、管理対象ユーザー (リソースと同じテナントのユーザー) の電子メール要求を要求できます。Your app can request the email claim for managed users (those from the same tenant as the resource) using the email optional claim. v2.0 エンドポイントでは、アプリで email OpenID Connect スコープを要求することもできます (要求を取得するためにオプション要求とスコープの両方を要求する必要はありません)。On the v2.0 endpoint, your app can also request the email OpenID Connect scope - you don't need to request both the optional claim and the scope to get the claim. 電子メール要求では、ユーザーのプロファイル情報からアドレス指定可能なメールのみがサポートされます。The email claim only supports addressable mail from the user's profile information.
name stringString name要求は、トークンのサブジェクトを識別する、人が認識できる値を示します。The name claim provides a human-readable value that identifies the subject of the token. この値は、一意であるとは限らず、変更可能であり、表示目的でのみ使用するように設計されています。The value isn't guaranteed to be unique, it is mutable, and it's designed to be used only for display purposes. この要求を受け取るには、 profile スコープが必要です。The profile scope is required to receive this claim.
nonce stringString nonce は、IDP に対する元の要求または承認要求に含まれるパラメーターと一致します。The nonce matches the parameter included in the original /authorize request to the IDP. 一致しない場合は、アプリケーションによってトークンが拒否されます。If it does not match, your application should reject the token.
oid 文字列、GUIDString, a GUID Microsoft ID システム (ここではユーザー アカウント) のオブジェクトに対する変更不可の識別子です。The immutable identifier for an object in the Microsoft identity system, in this case, a user account. この ID によって、複数のアプリケーションでユーザーが一意に識別されます。同じユーザーにサインインする 2 つの異なるアプリケーションは oid 要求で同じ値を受け取ります。This ID uniquely identifies the user across applications - two different applications signing in the same user will receive the same value in the oid claim. Microsoft Graph は、この ID を、指定されたユーザー アカウントの id プロパティとして返します。The Microsoft Graph will return this ID as the id property for a given user account. oid では複数のアプリがユーザーを関連付けることができるため、この要求を受け取るために profile スコープが必要です。Because the oid allows multiple apps to correlate users, the profile scope is required to receive this claim. 1 人のユーザーが複数のテナントに存在する場合、そのユーザーのオブジェクト ID はテナントごとに異なります。つまり、ユーザーが同じ資格情報で各アカウントにログインしても、それらは異なるアカウントと見なされます。Note that if a single user exists in multiple tenants, the user will contain a different object ID in each tenant - they're considered different accounts, even though the user logs into each account with the same credentials. oid 要求は GUID であり、再利用することはできません。The oid claim is a GUID and cannot be reused.
roles 文字列の配列Array of strings ログインしているユーザーに割り当てられた一連のロール。The set of roles that were assigned to the user who is logging in.
rh 不透明な文字列Opaque String Azure がトークンの再検証に使用する内部の要求。An internal claim used by Azure to revalidate tokens. 無視してください。Should be ignored.
sub 文字列、GUIDString, a GUID トークンが情報をアサートするプリンシパルです (アプリのユーザーなど)。The principal about which the token asserts information, such as the user of an app. この値は変更不可で、再割り当ても再利用もできません。This value is immutable and cannot be reassigned or reused. サブジェクトはペアワイズ識別子で、特定のアプリケーション ID に一意です。The subject is a pairwise identifier - it is unique to a particular application ID. 1 人のユーザーが 2 つの異なるクライアント ID を使用して 2 つの異なるアプリにサインインすると、そのアプリは、サブジェクト要求に対して 2 つの異なる値を受け取ることになります。If a single user signs into two different apps using two different client IDs, those apps will receive two different values for the subject claim. この動作が求められているかどうかは、アーキテクチャやプライバシーの要件によって異なります。This may or may not be wanted depending on your architecture and privacy requirements.
tid 文字列、GUIDString, a GUID ユーザーが属している Azure AD テナントを表す GUID です。A GUID that represents the Azure AD tenant that the user is from. 職場または学校アカウントの場合、GUID はユーザーが属している組織の不変のテナント ID です。For work and school accounts, the GUID is the immutable tenant ID of the organization that the user belongs to. 個人アカウントでは、この値は 9188040d-6c67-4c5b-b112-36a304b66dad です。For personal accounts, the value is 9188040d-6c67-4c5b-b112-36a304b66dad. この要求を受け取るには profile スコープが必要です。The profile scope is required to receive this claim.
unique_name stringString トークンのサブジェクトを識別する、人が判読できる値を提供します。Provides a human readable value that identifies the subject of the token. この値は、テナント内で一意であることが保証されているわけではなく、表示目的でのみ使用する必要があります。This value isn't guaranteed to be unique within a tenant and should be used only for display purposes. v1.0 id_tokens のみで発行されます。Only issued in v1.0 id_tokens.
uti 非透過的な文字列Opaque String Azure がトークンの再検証に使用する内部の要求。An internal claim used by Azure to revalidate tokens. 無視してください。Should be ignored.
ver 文字列、1.0 または 2.0String, either 1.0 or 2.0 id_token のバージョンを示します。Indicates the version of the id_token.

id_token の検証Validating an id_token

id_token の検証は、アクセス トークンの検証の最初の手順と似ています。クライアントは、正しい発行者がトークンを返送したことと、改ざんされていないことを検証する必要があります。Validating an id_token is similar to the first step of validating an access token - your client should validate that the correct issuer has sent back the token and that it hasn't been tampered with. id_tokens は常に JWT であるため、トークンを検証する多くのライブラリが存在しています。みずから検証するのではなく、これらのライブラリのいずれかを使用することをお勧めします。Because id_tokens are always a JWT, many libraries exist to validate these tokens - we recommend you use one of these rather than doing it yourself.

トークンを手動で検証するには、アクセス トークンを検証する手順の詳細をご覧ください。To manually validate the token, see the steps details in validating an access token. トークンの署名を検証した後で、id_token 内の次の要求を検証します (トークン検証ライブラリではこれも行われる場合があります)。After validating the signature on the token, the following claims should be validated in the id_token (these may also be done by your token validation library):

  • タイムスタンプ: iatnbfexp の各タイムスタンプがすべて、現在の時刻の前か後であることが必要です (該当する場合)。Timestamps: the iat, nbf, and exp timestamps should all fall before or after the current time, as appropriate.
  • 対象: aud 要求がアプリケーションのアプリ ID と一致する必要があります。Audience: the aud claim should match the app ID for your application.
  • nonce: ペイロードの nonce 要求が、最初の要求で /authorize エンドポイントに渡された nonce パラメーターと一致する必要があります。Nonce: the nonce claim in the payload must match the nonce parameter passed into the /authorize endpoint during the initial request.

次の手順Next steps