Tokens de ID da plataforma Microsoft IdentityMicrosoft identity platform ID tokens

id_tokens são enviados para o aplicativo cliente como parte de um fluxo do OpenID Connect.id_tokens are sent to the client application as part of an OpenID Connect flow. Eles podem ser enviados com um token de acesso ou em vez de um, e são usados pelo cliente para autenticar o usuário.They can be sent along side or instead of an access token, and are used by the client to authenticate the user.

Usando o id_tokenUsing the id_token

Os tokens de ID devem ser usados para validar que um usuário é quem alega ser e obter informações úteis adicionais sobre eles – ele não deve ser usado para autorização no lugar de um token de acesso.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. As declarações fornecidas por ele podem ser usadas para UX dentro de seu aplicativo, como chaves em um banco de dados e para fornecer acesso ao aplicativo cliente.The claims it provides can be used for UX inside your application, as keys in a database, and providing access to the client application. Ao criar chaves para um banco de idp dados, o não deve ser usado porque ele bagunça os cenários de convidado.When creating keys for a database, idp should not be used because it messes up guest scenarios. O chaveamento deve ser feito sub sozinho (que é sempre exclusivo), com tid o usado para roteamento, se necessário.Keying should be done on sub alone (which is always unique), with tid used for routing if need be. Se você precisar compartilhar dados entre oid serviços, sub + + o funcionará, pois vários serviços são os mesmos oid. tidIf you need to share data across services, oid+sub+tid will work since multiple services all get the same oid.

Declarações em um id_tokenClaims in an id_token

id_tokens para uma identidade da Microsoft são JWTs, o que significa que são compostos pelas partes de cabeçalho, de conteúdo e de assinatura.id_tokens for a Microsoft identity are JWTs, meaning they consist of a header, payload, and signature portion. Você pode usar o cabeçalho e a assinatura para verificar a autenticidade do token, enquanto o conteúdo tem informações sobre o usuário solicitado pelo cliente.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. Exceto quando observado, todas as declarações listadas aqui aparecem nos tokens de v1.0 e 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

Exiba esse token de exemplo de v1.0 em jwt.ms.View this v1.0 sample token in jwt.ms.

v2.0v2.0

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

Exiba esse token de exemplo de v2.0 em jwt.ms.View this v2.0 sample token in jwt.ms.

Declarações de cabeçalhoHeader claims

DeclaraçãoClaim FormatarFormat DescriçãoDescription
typ Cadeia de caracteres – sempre "JWT"String - always "JWT" Indica que o token é um JWT.Indicates that the token is a JWT.
alg CadeiaString Indica o algoritmo que foi usado para assinar o token.Indicates the algorithm that was used to sign the token. Exemplo: "RS256"Example: "RS256"
kid CadeiaString Impressão digital da chave pública usada para assinar esse token.Thumbprint for the public key used to sign this token. Emitido em id_tokens v1.0 e v2.0.Emitted in both v1.0 and v2.0 id_tokens.
x5t CadeiaString O mesmo (em uso e valor) que kid.The same (in use and value) as kid. No entanto, essa é uma declaração herdada emitida somente em id_tokens v1.0 para fins de compatibilidade.However, this is a legacy claim emitted only in v1.0 id_tokens for compatibility purposes.

Declarações de conteúdoPayload claims

Essa lista mostra as declarações que estão na maioria dos id_tokens por padrão (exceto quando indicado).This list shows the claims that are in most id_tokens by default (except where noted). No entanto, seu aplicativo pode usar declarações opcionais para solicitar declarações adicionais no id_token.However, your app can use optional claims to request additional claims in the id_token. Elas podem variar da groups declaração para informações sobre o nome do usuário.These can range from the groups claim to information about the user's name.

DeclaraçãoClaim FormatarFormat DescriçãoDescription
aud Cadeia de caracteres, um URI da ID do AplicativoString, an App ID URI Identifica o destinatário pretendido do token.Identifies the intended recipient of the token. Em id_tokens, o público-alvo é a ID de Aplicativo de seu aplicativo, atribuída a ele no portal do Azure.In id_tokens, the audience is your app's Application ID, assigned to your app in the Azure portal. O aplicativo deve validar esse valor e rejeitar o token, caso o valor não seja correspondente.Your app should validate this value, and reject the token if the value does not match.
iss Cadeia de caracteres, um URI STSString, an STS URI Identifica o STS (Serviço de Token de Segurança) que constrói e retorna o token e o locatário do Azure AD no qual o usuário foi autenticado.Identifies the security token service (STS) that constructs and returns the token, and the Azure AD tenant in which the user was authenticated. Se o token tiver sido emitido pelo ponto de extremidade v2.0, o URI terminará com /v2.0.If the token was issued by the v2.0 endpoint, the URI will end in /v2.0. O GUID que indica que o usuário é um consumidor da conta da Microsoft é 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. O aplicativo deve usar a parte do GUID da declaração para restringir o conjunto de locatários que podem entrar no aplicativo, se aplicável.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, um carimbo de data/hora UNIXint, a UNIX timestamp "Emitido em" indica quando ocorreu a autenticação desse token."Issued At" indicates when the authentication for this token occurred.
idp Cadeia de caracteres, normalmente um URI de STSString, usually an STS URI Registra o provedor de identidade que autenticou a entidade do token.Records the identity provider that authenticated the subject of the token. Esse valor é idêntico ao valor da declaração Emissor, a menos que a conta de usuário não esteja no mesmo locatário que o emissor – convidados, por exemplo.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. Se a declaração não estiver presente, significa que o valor de iss pode ser usado em vez disso.If the claim isn't present, it means that the value of iss can be used instead. Para as contas pessoais usadas em um contexto organizacional (por exemplo, uma conta pessoal convidada para um locatário do Azure AD), a declaração idppode ser 'live.com' ou um URI de STS que contém o locatário da conta Microsoft9188040d-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, um carimbo de data/hora UNIXint, a UNIX timestamp A declaração "nbf" (não antes) identifica a hora antes da qual o JWT NÃO DEVE ser aceito para processamento.The "nbf" (not before) claim identifies the time before which the JWT MUST NOT be accepted for processing.
exp int, um carimbo de data/hora UNIXint, a UNIX timestamp A declaração "exp" (hora de expiração) identifica a hora de expiração ou a hora após ela na qual o JWT NÃO DEVE ser aceito para processamento.The "exp" (expiration time) claim identifies the expiration time on or after which the JWT MUST NOT be accepted for processing. É importante observar que um recurso pode rejeitar o token antes dessa hora também, se, por exemplo, uma alteração na autenticação for necessária ou se uma revogação de token tiver sido detectada.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 CadeiaString O hash de código é incluído em tokens de ID apenas quando eles são emitidos com um código de autorização 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. Ele pode ser usado para validar a autenticidade de um código de autorização.It can be used to validate the authenticity of an authorization code. Para obter detalhes sobre como realizar essa validação, confira a Especificação OpenID Connect.For details about performing this validation, see the OpenID Connect specification.
at_hash CadeiaString O hash do token de acesso é incluído em tokens de ID apenas quando eles são emitidos com um token de acesso OAuth 2.0.The access token hash is included in ID tokens only when the ID token is issued with an OAuth 2.0 access token. Ele pode ser usado para validar a autenticidade de um token de acesso.It can be used to validate the authenticity of an access token. Para obter detalhes sobre como realizar essa validação, confira a Especificação OpenID Connect.For details about performing this validation, see the OpenID Connect specification.
aio Cadeia de caracteres opacaOpaque String Uma declaração interna usada pelo Azure AD para registrar os dados para reutilização de token.An internal claim used by Azure AD to record data for token reuse. Deve ser ignorado.Should be ignored.
preferred_username CadeiaString O nome de usuário principal que representa o usuário.The primary username that represents the user. Ele pode ser um endereço de email, número de telefone ou nome de usuário genérico sem um formato especificado.It could be an email address, phone number, or a generic username without a specified format. Seu valor é mutável e pode ser alterado ao longo do tempo.Its value is mutable and might change over time. Uma vez que é mutável, esse valor não deve ser usado para tomar decisões de autorização.Since it is mutable, this value must not be used to make authorization decisions. O profile escopo é necessário para receber essa declaração.The profile scope is required to receive this claim.
email CadeiaString O email declaração está presente por padrão para contas de convidados que possuem um endereço de email.The email claim is present by default for guest accounts that have an email address. O aplicativo pode solicitar a declaração de email para usuários gerenciados (aquelas do mesmo locatário do recurso) usando o email declaração opcional.Your app can request the email claim for managed users (those from the same tenant as the resource) using the email optional claim. No ponto de extremidade v 2.0, seu aplicativo também pode solicitar o email escopo da OpenID Connect - você não precisa solicitar a declaração opcional e o escopo para obter a declaração.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. A declaração de email só dá suporte a emails endereçável de informações de perfil do usuário.The email claim only supports addressable mail from the user's profile information.
name CadeiaString A declaração name fornece um valor legível por humanos que identifica o assunto do token.The name claim provides a human-readable value that identifies the subject of the token. O valor não é garantido como exclusivo, é mutável e foi projetado para ser usado somente para fins de exibição.The value isn't guaranteed to be unique, it is mutable, and it's designed to be used only for display purposes. O profile escopo é necessário para receber essa declaração.The profile scope is required to receive this claim.
nonce CadeiaString O nonce corresponde ao parâmetro incluído na solicitação original /authorize para o IDP.The nonce matches the parameter included in the original /authorize request to the IDP. Se esses itens não corresponderem, seu aplicativo deverá rejeitar o token.If it does not match, your application should reject the token.
oid Cadeia de caracteres, um GUIDString, a GUID O identificador imutável de um objeto do sistema de identidade da Microsoft, nesse caso, uma conta de usuário.The immutable identifier for an object in the Microsoft identity system, in this case, a user account. Essa ID identifica exclusivamente o usuário entre os aplicativos - dois aplicativos diferentes autenticando o mesmo usuário receberão o mesmo valor na declaração 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. O Microsoft Graph retornará essa ID como a propriedade id para uma determinada conta de usuário.The Microsoft Graph will return this ID as the id property for a given user account. Como o oid permite que vários aplicativos correlacionem os usuários profile , o escopo é necessário para receber essa declaração.Because the oid allows multiple apps to correlate users, the profile scope is required to receive this claim. Observe que, se um único usuário existir em vários locatários, o usuário conterá uma ID de objeto diferente em cada locatário. eles são considerados contas diferentes, mesmo que o usuário faça logon em cada conta com as mesmas credenciais.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.
roles Matriz de cadeias de caracteresArray of strings O conjunto de funções que foram atribuídas ao usuário que está fazendo logon.The set of roles that were assigned to the user who is logging in.
rh Cadeia de caracteres opacaOpaque String Uma declaração interna usada pelo Azure para revalidar tokens.An internal claim used by Azure to revalidate tokens. Deve ser ignorado.Should be ignored.
sub Cadeia de caracteres, um GUIDString, a GUID O item mais importante sobre o qual o token declara informações, como o usuário de um aplicativo.The principal about which the token asserts information, such as the user of an app. Esse valor é imutável e não pode ser reatribuído nem reutilizado.This value is immutable and cannot be reassigned or reused. O assunto é um identificador de paridade e é exclusivo a uma ID de aplicativo específica.The subject is a pairwise identifier - it is unique to a particular application ID. Se um único usuário entrar em dois aplicativos diferentes usando duas IDs de cliente diferentes, esses aplicativos receberão dois valores diferentes para a declaração de assunto.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. Isso pode ou não ser desejado dependendo dos requisitos de arquitetura e privacidade.This may or may not be wanted depending on your architecture and privacy requirements.
tid Cadeia de caracteres, um GUIDString, a GUID Um GUID que representa o locatário do Azure AD do qual o usuário é proveniente.A GUID that represents the Azure AD tenant that the user is from. Para contas corporativas e de estudante, o GUID é a ID de locatário imutável da organização à qual o usuário pertence.For work and school accounts, the GUID is the immutable tenant ID of the organization that the user belongs to. Para contas pessoais, o valor é 9188040d-6c67-4c5b-b112-36a304b66dad.For personal accounts, the value is 9188040d-6c67-4c5b-b112-36a304b66dad. O profile escopo é necessário para receber essa declaração.The profile scope is required to receive this claim.
unique_name CadeiaString Fornece um valor legível que identifica a entidade do token.Provides a human readable value that identifies the subject of the token. Esse valor não tem garantia de ser exclusivo em um locatário e deve ser usado somente para fins de exibição.This value isn't guaranteed to be unique within a tenant and should be used only for display purposes. Emitido somente no id_tokens v1.0.Only issued in v1.0 id_tokens.
uti Cadeia de caracteres opacaOpaque String Uma declaração interna usada pelo Azure para revalidar tokens.An internal claim used by Azure to revalidate tokens. Deve ser ignorado.Should be ignored.
ver Cadeia de caracteres, 1.0 ou 2.0String, either 1.0 or 2.0 Indica a versão do id_token.Indicates the version of the id_token.

Validação de um id_tokenValidating an id_token

A validação id_token de um é semelhante à primeira etapa da validação de um token de acesso : seu cliente deve validar que o emissor correto enviou o token e que ele não foi adulterado.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. Como id_tokens sempre são um JWT, há muitas bibliotecas para validar esses tokens – recomendamos que você use uma delas em vez de fazer isso por conta própria.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.

Para validar o token manualmente, consulte os detalhes das etapas em validar um token de acesso.To manually validate the token, see the steps details in validating an access token. Depois de validar a assinatura no token, as seguintes declarações deverão ser validadas no id_token (elas também podem ser feitas pela sua biblioteca de validação de 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):

  • Carimbos de data/hora: os carimbos de data/hora iat, nbf, e exp devem estar todos antes ou depois da hora atual, conforme apropriado.Timestamps: the iat, nbf, and exp timestamps should all fall before or after the current time, as appropriate.
  • Público-alvo: a declaração aud deve corresponder à ID do aplicativo do seu aplicativo.Audience: the aud claim should match the app ID for your application.
  • Nonce: a declaração nonce no conteúdo deve corresponder ao parâmetro nonce passado para o ponto de extremidade /authorize durante a solicitação inicial.Nonce: the nonce claim in the payload must match the nonce parameter passed into the /authorize endpoint during the initial request.

Próximas etapasNext steps