Маркеры ИДЕНТИФИКАТОРов платформы Microsoft IdentityMicrosoft identity platform ID tokens

id_tokens отправляются в клиентское приложение как часть потока OpenID Connect Connect (OIDC).id_tokens are sent to the client application as part of an OpenID Connect (OIDC) flow. Они могут отправляться вместе или вместо маркера доступа и использоваться клиентом для проверки подлинности пользователя.They can be sent along side or instead of an access token, and are used by the client to authenticate the user.

Использование маркера идентификатораUsing the id_token

Токены идентификации следует использовать для проверки того, что пользователь должен получить дополнительную полезную информацию о них, и не должен использоваться для авторизации вместо маркера доступа.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.

Утверждения в маркере идентификатораClaims in an id_token

id_tokens являются JWT (веб-токены JSON), то есть состоят из заголовка, полезной нагрузки и части подписи.id_tokens are JWTs (JSON Web Tokens), 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. За исключением указанных случаев, все указанные здесь утверждения JWT отображаются в маркерах v 1.0 и v 2.0.Except where noted, all JWT claims listed here appear in both v1.0 and v2.0 tokens.

Версия 1.0v1.0

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

Просмотрите этот пример маркера версии 1.0 в jwt.ms.View this v1.0 sample token in jwt.ms.

Версия 2.0v2.0

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

Просмотрите этот пример маркера версии 2.0 в jwt.ms.View this v2.0 sample token in jwt.ms.

Утверждения заголовкаHeader claims

УтверждениеClaim ФорматFormat ОписаниеDescription
typ Строка — всегда JWTString - always "JWT" Указывает, что токен является маркером JWT.Indicates that the token is a JWT token.
alg СтрокаString Обозначает алгоритм, с помощью которого был подписан маркер.Indicates the algorithm that was used to sign the token. Пример: "RS256"Example: "RS256"
kid СтрокаString Отпечаток для открытого ключа, используемого для подписи этого маркера.Thumbprint for the public key used to sign this token. Выпущенные id_tokens версий 1.0 и 2.0.Emitted in both v1.0 and v2.0 id_tokens.
x5t СтрокаString Также как и kid (использование и значение).The same (in use and value) as kid. Тем не менее, это устаревшее утверждение, выпускаемое для обеспечения совместимости только id_tokens версии 1.0.However, this is a legacy claim emitted only in v1.0 id_tokens for compatibility purposes.

Утверждения полезных данныхPayload claims

В этом списке показаны утверждения JWT, которые в большинстве id_tokens по умолчанию (за исключением указанных случаев).This list shows the JWT claims that are in most id_tokens by default (except where noted). Однако приложение может использовать необязательные утверждения для запроса дополнительных утверждений JWT в id_token.However, your app can use optional claims to request additional JWT claims in the id_token. Они могут варьироваться от groups утверждения до сведений об имени пользователя.These can range from the groups claim to information about the user's name.

УтверждениеClaim ФорматFormat ОписаниеDescription
aud Строка с URI идентификатора приложенияString, an App ID URI Определяет целевого получателя маркера.Identifies the intended recipient of the token. Аудитория — это идентификатор вашего приложения в id_tokens, назначенный приложению на портале Azure.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 Строка с URI службы токенов безопасностиString, 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. Если маркер был выпущен конечной точкой версии 2.0, универсальный код ресурса (URI) заканчивается значением /v2.0.If the token was issued by the v2.0 endpoint, the URI will end in /v2.0. 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, метка времени UNIXint, a UNIX timestamp Значение Issued At (Выпущено в) показывает, когда произошла проверка подлинности этого маркера."Issued At" indicates when the authentication for this token occurred.
idp Строка, обычно — URI STSString, usually an STS URI Фиксирует поставщика удостоверений, который проверил подлинность субъекта маркера.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 или URI STS, содержащим клиент учетной записи Microsoft 9188040d-6c67-4c5b-b112-36a304b66dad.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, метка времени UNIXint, 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, метка времени UNIXint, 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 СтрокаString Хэш-код включается в состав маркеров идентификации, только если маркер идентификации выдается вместе с кодом авторизации OAuth 2.0.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 СтрокаString Хэш маркера доступа включается в маркеры идентификации только в том случае, если маркер идентификации выдается из /authorize конечной точки с маркером доступа OAuth 2,0.The access token hash is included in ID tokens only when the ID token is issued from the /authorize endpoint 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. Не возвращается токены ID из /token конечной точки.This is not returned on ID tokens from the /token endpoint.
aio Непрозрачная строкаOpaque String Внутреннее утверждение, в котором Azure AD сохраняет данные для повторного использования маркеров.An internal claim used by Azure AD to record data for token reuse. Можно пропустить.Should be ignored.
preferred_username СтрокаString Основное имя пользователя, представляющее пользователя.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 СтрокаString Утверждение 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. На конечной точке версии 2.0 приложение может также запросить область OpenID Connect email. Чтобы получить утверждение, вам не нужно запрашивать необязательное утверждение и область.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 СтрокаString Утверждение 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 СтрокаString Функция 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 Неизменяемый идентификатор объекта в системе идентификации Майкрософт. В данном случае это учетная запись пользователя.The immutable identifier for an object in the Microsoft identity system, in this case, a user account. Этот идентификатор уникально идентифицирует пользователя в приложениях. Если один пользователь войдет в два различных приложения с помощью двух разных идентификаторов клиента, эти приложения получат одинаковое значение в утверждении 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 указанной учетной записи.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. Обратите внимание, что если один пользователь существует в нескольких клиентах, он будет содержать разные ИДЕНТИФИКАТОРы объектов в каждом клиенте — они считаются разными учетными записями, даже если пользователь входит в каждую учетную запись с теми же учетными данными.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 СтрокаString Субъект, в отношении которого маркер утверждает сведения, например данные о пользователе приложения.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. Субъект — это попарный идентификатор, который является уникальным для определенного идентификатора приложения.The subject is a pairwise identifier - it is unique to a particular application ID. Если один пользователь входит в два разных приложения с использованием двух разных идентификаторов клиентов, эти приложения получат два разных значения для утверждения субъекта.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 Идентификатор GUID, представляющий клиент Azure AD пользователя.A GUID that represents the Azure AD tenant that the user is from. Для рабочих и учебных учетных записей значением GUID является неизменяемый идентификатор клиента организации, к которой принадлежит пользователь.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 СтрокаString Предоставляет удобное для восприятия значение, которое идентифицирует субъект маркера.Provides a human readable value that identifies the subject of the token. Это значение является уникальным в любой момент времени, но по мере повторного использования сообщений электронной почты и других идентификаторов это значение может появиться в других учетных записях, и поэтому должно использоваться только в целях отображения.This value is unique at any given point in time, but as emails and other identifiers can be reused, this value can reappear on other accounts, and should therefore be used only for display purposes. Выпущен только id_tokens версии 1.0.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.
hasgroups Логическое значениеBoolean При наличии всегда имеет значение true, если пользователь находится по крайней мере в одной группе.If present, always true, denoting the user is in at least one group. Используется вместо утверждения Groups для JWT в неявных потоках предоставления разрешений, если утверждение полных групп привело бы к расширению фрагмента URI за пределами длины URL-адреса (в настоящее время 6 или более групп).Used in place of the groups claim for JWTs in implicit grant flows if the full groups claim would extend the URI fragment beyond the URL length limits (currently 6 or more groups). Указывает на то, что клиент должен использовать API Microsoft Graph для определения групп пользователя (https://graph.microsoft.com/v1.0/users/{userID}/getMemberObjects).Indicates that the client should use the Microsoft Graph API to determine the user's groups (https://graph.microsoft.com/v1.0/users/{userID}/getMemberObjects).
groups:src1 Объект JSONJSON object Для запросов маркеров, которые не ограничены по длине (см. hasgroups выше), но все еще слишком большие для маркеров, будет добавлена ссылка на полный список групп, в которые входит пользователь.For token requests that are not length limited (see hasgroups above) but still too large for the token, a link to the full groups list for the user will be included. Используется для JWT в качестве распределенного утверждения и для SAML в качестве нового утверждения вместо groups.For JWTs as a distributed claim, for SAML as a new claim in place of the groups claim.

Пример значения JWT:Example JWT Value:
"groups":"src1"
"_claim_sources: "src1" : { "endpoint" : "https://graph.microsoft.com/v1.0/users/{userID}/getMemberObjects" }"_claim_sources: "src1" : { "endpoint" : "https://graph.microsoft.com/v1.0/users/{userID}/getMemberObjects" }

Дополнительные сведения см. в разделе Групповая заявка.For more info, see Groups overage claim.

Примечание

Версии 1.0 и 2.0 id_token имеют различия в объеме информации, которая будет рассматриваться в приведенных выше примерах.The v1.0 and v2.0 id_token have differences in the amount of information they will carry as seen from the examples above. Версия основана на конечной точке, из которой она была запрошена.The version is based on the endpoint from where it was requested. Хотя существующие приложения, вероятно, используют конечную точку Azure AD, новые приложения должны использовать конечную точку версии 2.0 "платформа Microsoft Identity".While existing applications likely use the Azure AD endpoint, new applications should use the v2.0 "Microsoft identity platform" endpoint.

  • v 1.0: конечные точки Azure AD: https://login.microsoftonline.com/common/oauth2/authorizev1.0: Azure AD endpoints: https://login.microsoftonline.com/common/oauth2/authorize
  • Версия 2.0: конечные точки платформы Microsoft Identity: https://login.microsoftonline.com/common/oauth2/v2.0/authorizev2.0: Microsoft identity Platform endpoints: https://login.microsoftonline.com/common/oauth2/v2.0/authorize

Использование заявок для надежной идентификации пользователя (субъекта и идентификатора объекта)Using claims to reliably identify a user (Subject and Object ID)

При определении пользователя (скажем, при просмотре его в базе данных или при принятии решения о том, какие разрешения им есть) очень важно использовать сведения, которые останутся постоянными и уникальными по времени.When identifying a user (say, looking them up in a database, or deciding what permissions they have), it's critical to use information that will remain constant and unique across time. Устаревшие приложения иногда используют такие поля, как адрес электронной почты, номер телефона или имя участника-пользователя.Legacy applications sometimes use field like the email address, a phone number, or the UPN. Все они могут меняться со временем, а также могут использоваться повторно с течением времени, когда сотрудник изменяет свое имя, или сотруднику предоставляется адрес электронной почты, совпадающий с предыдущим, больше не имеющимся сотрудником.All of these can change over time, and can also be reused over time - when an employee changes their name, or an employee is given an email address that matches that of a previous, no longer present employee). Таким образом, очень важно , чтобы ваше приложение не использовало для восприятия данных, которое пользователь может легко прочитать, а значит, кто-то его прочитал и хочу изменить его.Thus, it is critical that your application not use human-readable data to identify a user - human readable generally means someone will read it, and want to change it. Вместо этого используйте утверждения, предоставляемые стандартом OIDC, или утверждения расширения, предоставляемые корпорацией Майкрософт sub и oid утверждениями.Instead, use the claims provided by the OIDC standard, or the extension claims provided by Microsoft - the sub and oid claims.

Для правильного хранения информации для каждого пользователя используйте sub или oid только один (идентификатор GUID уникален), который tid используется для маршрутизации или сегментирования при необходимости.To correctly store information per-user, use sub or oid alone (which as GUIDs are unique), with tid used for routing or sharding if needed. Если необходимо совместно использовать данные в разных службах, oid + tid лучше всего, так как все приложения получают одинаковые oid и tid утверждения для конкретного пользователя.If you need to share data across services, oid+tid is best as all apps get the same oid and tid claims for a given user. subУтверждение на платформе Microsoft Identity — это уникальное значение, основанное на сочетании получателя маркера, клиента и пользователя.The sub claim in the Microsoft identity platform is "pair-wise" - it is unique based on a combination of the token recipient, tenant, and user. Поэтому два приложения, которые запрашивают маркеры ИДЕНТИФИКАТОРов для данного пользователя, получат разные sub утверждения, но те же oid утверждения для этого пользователя.Thus, two apps that request ID tokens for a given user will receive different sub claims, but the same oid claims for that user.

Примечание

Не используйте idp утверждение для хранения сведений о пользователе при попытке корреляции пользователей между клиентами.Do not use the idp claim to store information about a user in an attempt to correlate users across tenants. Она не будет работать, так как oid sub утверждения и для пользователя меняются в разных клиентах, чтобы гарантировать, что приложения не смогут контролировать работу пользователей между клиентами.It will not function, as the oid and sub claims for a user change across tenants, by design, to ensure that applications cannot track users across tenants.

Гостевые сценарии, в которых пользователь находится в одном клиенте и выполняет проверку подлинности в другом, должен считать пользователя новым пользователем в службе.Guest scenarios, where a user is homed in one tenant, and authenticates in another, should treat the user as if they are a brand new user to the service. Ваши документы и привилегии в клиенте Contoso не должны применяться в клиенте Fabrikam.Your documents and privileges in the Contoso tenant should not apply in the Fabrikam tenant. Это важно для предотвращения случайной утечки данных между клиентами.This is important to prevent accidental data leakage across tenants.

Утверждение избытка группGroups overage claim

Чтобы размер токена не превышал ограничения на размер заголовка HTTP, Azure AD ограничивает количество идентификаторов объектов, включаемых в groups утверждение.To ensure that the token size doesn't exceed HTTP header size limits, Azure AD limits the number of object IDs that it includes in the groups claim. Если число групп, в которых состоит пользователь, выходит за предел избытка (150 для маркеров SAML, 200 для маркеров JWT), Azure AD не выдает утверждение групп в маркере.If a user is member of more groups than the overage limit (150 for SAML tokens, 200 for JWT tokens), then Azure AD does not emit the groups claim in the token. Вместо этого в маркер включается утверждение избытка, которое указывает приложению выполнить запрос к API Microsoft Graph для получения групп, в которых состоит пользователь.Instead, it includes an overage claim in the token that indicates to the application to query the Microsoft Graph API to retrieve the user's group membership.

{
  ...
  "_claim_names": {
   "groups": "src1"
    },
    {
  "_claim_sources": {
    "src1": {
        "endpoint":"[Url to get this user's group membership from]"
        }
       }
     }
  ...
 }

Проверка маркера id_tokenValidating an id_token

Проверка id_token аналогична первому этапу проверки маркера доступа . Клиент может проверить, что правильный издатель отправил ответ на маркер и что он не был изменен.Validating an id_token is similar to the first step of validating an access token - your client can 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 token, many libraries exist to validate these tokens - we recommend you use one of these rather than doing it yourself. Обратите внимание, что только конфиденциальные клиенты (с секретом) должны проверять маркеры идентификации.Note that only confidential clients (those with a secret) should validate ID tokens. Общедоступные приложения (код, выполняющийся полностью на устройстве или в сети, которые не управляются, например, браузер пользователя или их домашняя сеть) не имеют смысла проверять маркер идентификации, так как пользователь-злоумышленник может перехватить и изменить ключи, используемые для проверки маркера.Public applications (code running entirely on a device or network you don't control - for instance, a user's browser or their home network) don't benefit from validating the ID token, as a malicious user can intercept and edit the keys used for validation of the token.

Чтобы вручную проверить маркер, см. в разделе Проверка маркера доступа.To manually validate the token, see the steps details in validating an access token. После проверки подписи маркера необходимо проверить следующие утверждения JWT в id_token (это также можно сделать с помощью библиотеки проверки маркеров):After validating the signature on the token, the following JWT claims should be validated in the id_token (these may also be done by your token validation library):

  • Метки времени. Метки времени iat, nbf, и exp следует соответственно выполнить до или после текущего момента времени.Timestamps: the iat, nbf, and exp timestamps should all fall before or after the current time, as appropriate.
  • Аудитория. Утверждение aud должно соответствовать идентификатору вашего приложения.Audience: the aud claim should match the app ID for your application.
  • Nonce. Утверждение nonce в полезных данных должно соответствовать параметру nonce, переданному в конечную точку, или авторизации конечной точки во время первоначального запроса.Nonce: the nonce claim in the payload must match the nonce parameter passed into the /authorize endpoint during the initial request.

Дальнейшие действияNext steps