La Plataforma de identidad de Microsoft y el flujo de credenciales de cliente de OAuth 2.0Microsoft identity platform and the OAuth 2.0 client credentials flow

Puede usar la concesión de credenciales de cliente de OAuth 2.0 especificada en RFC 6749 y a veces denominada OAuth de dos días, para acceder a recursos hospedados en la web mediante la identidad de una aplicación.You can use the OAuth 2.0 client credentials grant specified in RFC 6749, sometimes called two-legged OAuth, to access web-hosted resources by using the identity of an application. Este tipo de concesión se usa principalmente para las interacciones entre servidores que se deben ejecutar en segundo plano, sin la interacción inmediata con un usuario.This type of grant is commonly used for server-to-server interactions that must run in the background, without immediate interaction with a user. Estos tipos de aplicaciones suelen denominarse demonios o cuentas de servicio.These types of applications are often referred to as daemons or service accounts.

En este artículo se describe cómo programar directamente con el protocolo de la aplicación.This article describes how to program directly against the protocol in your application. Cuando sea posible, se recomienda usar las bibliotecas de autenticación de Microsoft (MSAL) admitidas, en lugar de adquirir tokens y API web protegidas por llamadas.When possible, we recommend you use the supported Microsoft Authentication Libraries (MSAL) instead to acquire tokens and call secured web APIs. Además, eche un vistazo a las aplicaciones de ejemplo que usan MSAL.Also take a look at the sample apps that use MSAL.

El flujo de concesión de credenciales de cliente de OAuth 2.0 permite que un servicio web (cliente confidencial) use sus propias credenciales para autenticarse al llamar a otro servicio web, en lugar de suplantar a un usuario.The OAuth 2.0 client credentials grant flow permits a web service (confidential client) to use its own credentials, instead of impersonating a user, to authenticate when calling another web service. En este escenario, el cliente es normalmente un servicio web de nivel intermedio, un servicio demonio o un sitio web.In this scenario, the client is typically a middle-tier web service, a daemon service, or a web site. Para conseguir un mayor nivel de control, la plataforma de identidad de Microsoft también permite que el servicio que realiza la llamada use un certificado (en lugar de un secreto compartido) como credencial.For a higher level of assurance, the Microsoft identity platform also allows the calling service to use a certificate (instead of a shared secret) as a credential.

En el escenario más típico de OAuth de tres vías, una aplicación cliente tiene permiso para obtener acceso a un recurso en nombre de un usuario específico.In the more typical three-legged OAuth, a client application is granted permission to access a resource on behalf of a specific user. El permiso se delega desde el usuario a la aplicación, habitualmente durante el proceso de consentimiento.The permission is delegated from the user to the application, usually during the consent process. Sin embargo, en el flujo de credenciales de cliente (OAuth con dos patas), los permisos se conceden directamente en la propia aplicación.However, in the client credentials (two-legged OAuth) flow, permissions are granted directly to the application itself. Cuando la aplicación presenta un token a un recurso, este exige que sea la propia aplicación la que tenga autorización para realizar una acción, no el usuario.When the app presents a token to a resource, the resource enforces that the app itself has authorization to perform an action and not the user.

Diagrama de protocoloProtocol diagram

El flujo completo de credenciales de cliente tiene un aspecto similar al diagrama siguiente.The entire client credentials flow looks similar to the following diagram. Más adelante en este artículo se describe cada uno de los pasos.We describe each of the steps later in this article.

Diagrama que muestra el flujo de credenciales de cliente

Obtención de autorización directaGet direct authorization

Una aplicación recibe habitualmente autorización directa para acceder a un recurso de una de dos maneras:An app typically receives direct authorization to access a resource in one of two ways:

Estos dos métodos son los más comunes en Azure AD y se recomiendan para los clientes y recursos que realizan el flujo de credenciales de cliente.These two methods are the most common in Azure AD and we recommend them for clients and resources that perform the client credentials flow. Un recurso puede elegir autorizar a sus clientes de otras formas.A resource can also choose to authorize its clients in other ways. Cada servidor de recurso puede elegir el mejor método para su aplicación.Each resource server can choose the method that makes the most sense for its application.

Listas de control de accesoAccess control lists

Un proveedor de recursos podría exigir una comprobación de autorización basada en una lista de identificadores de aplicación (cliente) que conoce, y concede un nivel de acceso específico.A resource provider might enforce an authorization check based on a list of application (client) IDs that it knows and grants a specific level of access to. Cuando el recurso recibe un token del punto de conexión de la Plataforma de identidad de Microsoft, puede descodificar el token y extraer el identificador de la aplicación del cliente de las notificaciones appid y iss.When the resource receives a token from the Microsoft identity platform endpoint, it can decode the token and extract the client's application ID from the appid and iss claims. Luego, compara la aplicación con una lista de control de acceso (ACL) que mantiene.Then it compares the application against an access control list (ACL) that it maintains. El método y la granularidad de la ACL podrían variar considerablemente entre los recursos.The ACL's granularity and method might vary substantially between resources.

Un caso de uso común es utilizar una ACL para ejecutar pruebas para una aplicación web o para una API web.A common use case is to use an ACL to run tests for a web application or for a web API. La API web podría conceder solo un subconjunto de permisos completos a un cliente específico.The web API might grant only a subset of full permissions to a specific client. Para ejecutar pruebas de un extremo a otro en la API, cree un cliente de prueba que adquiera tokens desde el punto de conexión de la Plataforma de identidad de Microsoft y que, luego, los envíe a la API.To run end-to-end tests on the API, create a test client that acquires tokens from the Microsoft identity platform endpoint and then sends them to the API. Luego, la API comprueba la ACL del identificador de la aplicación del cliente de prueba para tener acceso completo a toda la funcionalidad de la API.The API then checks the ACL for the test client's application ID for full access to the API's entire functionality. Si usa este tipo de ACL, asegúrese de validar no solo el valor appid de la persona que llama, sino también que el valor de iss del token sea de confianza.If you use this kind of ACL, be sure to validate not only the caller's appid value but also validate that the iss value of the token is trusted.

Este tipo de autorización es común para las cuentas de servicio y los demonios que necesitan tener acceso a datos que pertenecen a los usuarios consumidores con cuentas personales de Microsoft.This type of authorization is common for daemons and service accounts that need to access data owned by consumer users who have personal Microsoft accounts. En el caso de los datos que pertenecen a organizaciones, se recomienda obtener la autorización necesaria a través de los permisos de aplicación.For data owned by organizations, we recommend that you get the necessary authorization through application permissions.

Permisos de aplicaciónApplication permissions

En lugar de usar las ACL, puede usar las API para exponer un conjunto de permisos de aplicación.Instead of using ACLs, you can use APIs to expose a set of application permissions. El administrador de una organización concede un permiso de aplicación a una aplicación, el que solo se puede usar para obtener acceso a los datos que pertenecen a esa organización y sus empleados.An application permission is granted to an application by an organization's administrator, and can be used only to access data owned by that organization and its employees. Por ejemplo, Microsoft Graph expone varios permisos de aplicación para hacer lo siguiente:For example, Microsoft Graph exposes several application permissions to do the following:

  • Leer correo en todos los buzones de correoRead mail in all mailboxes
  • Leer y escribir correo en todos los buzones de correoRead and write mail in all mailboxes
  • Enviar correo como cualquier usuarioSend mail as any user
  • Leer datos de directorioRead directory data

Para más información sobre los permisos de aplicación, vaya a Microsoft Graph.For more information about application permissions, go to Microsoft Graph.

Para usar permisos de aplicación en la aplicación, siga los pasos que se describen en las secciones siguientes.To use application permissions in your app, follow the steps discussed in the next sections.

Nota

Al realizar la autenticación como una aplicación, en lugar de hacerlo con un usuario, no se pueden usar "permisos delegados" (ámbitos concedidos por un usuario).When authenticating as an application, as opposed to with a user, you cannot use "delegated permissions" (scopes that are granted by a user). Debe usar "permisos de aplicación", también conocidos como "roles", que un administrador (o la API web mediante autorización previa) concede para la aplicación.You must use "application permissions", also known as "roles", that are granted by an admin for the application (or via pre-authorization by the web API).

Solicitud de los permisos en el portal de registro de aplicacionesRequest the permissions in the app registration portal

  1. Registre y cree una aplicación desde la nueva experiencia Registros de aplicaciones (versión preliminar).Register and create an app through the new App registrations (Preview) experience.
  2. Vaya a su aplicación en la experiencia Registros de aplicaciones (versión preliminar).Go to your application in the App registrations (Preview) experience. Acceda a la sección Certificados y secretos y agregue un nuevo secreto de cliente, ya que necesitará al menos uno para solicitar un token.Navigate to the Certificates & secrets section, and add a new client secret, because you'll need at least one client secret to request a token.
  3. Busque la sección de permisos de API y agregue los permisos de aplicación que esta requiere.Locate the API permissions section, and then add the application permissions that your app requires.
  4. Guarde el registro de aplicaciones.Save the app registration.

Habitualmente, cuando compila una aplicación que usa permisos de aplicación, la aplicación requiere una página o vista en la que el administrador aprueba los permisos de la aplicación.Typically, when you build an application that uses application permissions, the app requires a page or view on which the admin approves the app's permissions. Esta página puede ser parte del flujo de inicio de sesión de la aplicación o de la configuración de la aplicación, o bien puede ser un flujo de "conexión" dedicado.This page can be part of the app's sign-in flow, part of the app's settings, or it can be a dedicated "connect" flow. En muchos casos, tiene sentido que la aplicación muestre esta vista de conexión solo después de que un usuario haya iniciado sesión con una cuenta Microsoft profesional o educativa.In many cases, it makes sense for the app to show this "connect" view only after a user has signed in with a work or school Microsoft account.

Si inicia la sesión del usuario en la aplicación, puede identificar la organización a la que este pertenece antes de pedirle que apruebe los permisos de la aplicación.If you sign the user into your app, you can identify the organization to which the user belongs to before you ask the user to approve the application permissions. Aunque no es estrictamente necesario, puede ayudarlo a crear una experiencia más intuitiva para los usuarios.Although not strictly necessary, it can help you create a more intuitive experience for your users. Para iniciar la sesión del usuario, siga nuestros tutoriales del protocolo de la Plataforma de identidad de Microsoft.To sign the user in, follow our Microsoft identity platform protocol tutorials.

Solicitud de los permisos de un administrador de directoriosRequest the permissions from a directory admin

Cuando esté listo para solicitar permisos al administrador de la organización, puede redirigir al usuario al punto de conexión de consentimiento del administrador de la Plataforma de identidad de Microsoft.When you're ready to request permissions from the organization's admin, you can redirect the user to the Microsoft identity platform admin consent endpoint.

Sugerencia

Pruebe a ejecutar esta solicitud en PostmanTry executing this request in Postman! (Use su propio identificador de aplicación para obtener mejores resultados; la aplicación del tutorial no solicitará permisos útiles). Pruebe a ejecutar esta solicitud en Postman(Use your own app ID for best results - the tutorial application won't request useful permissions.) Try running this request in Postman

// Line breaks are for legibility only.

GET https://login.microsoftonline.com/{tenant}/adminconsent?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&state=12345
&redirect_uri=http://localhost/myapp/permissions

Sugerencia profesional: Intente pegar la siguiente solicitud en un explorador.Pro tip: Try pasting the following request in a browser.

https://login.microsoftonline.com/common/adminconsent?client_id=6731de76-14a6-49ae-97bc-6eba6914391e&state=12345&redirect_uri=http://localhost/myapp/permissions
ParámetroParameter CondiciónCondition DescripciónDescription
tenant ObligatorioRequired El inquilino de directorio al que quiere solicitar permiso.The directory tenant that you want to request permission from. Puede estar en formato de nombre descriptivo o GUID.This can be in GUID or friendly name format. Si no sabe a qué inquilino pertenece el usuario y desea permitirle iniciar sesión con cualquier inquilino, use common.If you don't know which tenant the user belongs to and you want to let them sign in with any tenant, use common.
client_id ObligatorioRequired El identificador de aplicación (cliente) que la experiencia Azure Portal: Registros de aplicaciones asignó a la aplicación.The Application (client) ID that the Azure portal – App registrations experience assigned to your app.
redirect_uri ObligatorioRequired El URI de redireccionamiento adonde desea que se envíe la respuesta para que la controle la aplicación.The redirect URI where you want the response to be sent for your app to handle. Debe coincidir exactamente con uno de los URI de redireccionamiento que registró en el portal, con la excepción de que debe estar codificado como dirección URL y puede tener segmentos de trazado adicionales.It must exactly match one of the redirect URIs that you registered in the portal, except that it must be URL encoded, and it can have additional path segments.
state RecomendadoRecommended Un valor incluido en la solicitud que también se devolverá en la respuesta del token.A value that's included in the request that's also returned in the token response. Puede ser una cadena de cualquier contenido que desee.It can be a string of any content that you want. El estado se usa para codificar información sobre el estado del usuario en la aplicación antes de que se haya producido la solicitud de autenticación, por ejemplo, la página o vista en la que estaban.The state is used to encode information about the user's state in the app before the authentication request occurred, such as the page or view they were on.

En este momento, Azure AD exige que solo un administrador de inquilino pueda iniciar sesión para completar la solicitud.At this point, Azure AD enforces that only a tenant administrator can sign into complete the request. Se pedirá al administrador que apruebe todos los permisos de aplicación directos que solicitó para la aplicación en el portal de registro de aplicaciones.The administrator will be asked to approve all the direct application permissions that you have requested for your app in the app registration portal.

Respuesta correctaSuccessful response

Si el administrador aprueba los permisos para la aplicación, la respuesta correcta tendrá un aspecto similar al siguiente:If the admin approves the permissions for your application, the successful response looks like this:

GET http://localhost/myapp/permissions?tenant=a8990e1f-ff32-408a-9f8e-78d3b9139b95&state=state=12345&admin_consent=True
ParámetroParameter DescripciónDescription
tenant El inquilino de directorio que concedió los permisos solicitados a la aplicación, en formato GUID.The directory tenant that granted your application the permissions that it requested, in GUID format.
state Un valor incluido en la solicitud que también se devuelve en la respuesta del token.A value that is included in the request that also is returned in the token response. Puede ser una cadena de cualquier contenido que desee.It can be a string of any content that you want. El estado se usa para codificar información sobre el estado del usuario en la aplicación antes de que se haya producido la solicitud de autenticación, por ejemplo, la página o vista en la que estaban.The state is used to encode information about the user's state in the app before the authentication request occurred, such as the page or view they were on.
admin_consent Se establece en True.Set to True.
Respuesta de errorError response

Si el administrador no aprueba los permisos de la aplicación, la respuesta de error tendrá el aspecto siguiente:If the admin does not approve the permissions for your application, the failed response looks like this:

GET http://localhost/myapp/permissions?error=permission_denied&error_description=The+admin+canceled+the+request
ParámetroParameter DescripciónDescription
error Una cadena de código de error que puede usar para clasificar los tipos de errores y que puede usar para reaccionar ante los errores.An error code string that you can use to classify types of errors, and which you can use to react to errors.
error_description Un mensaje de error específico que puede ayudarle a identificar la causa raíz de un error.A specific error message that can help you identify the root cause of an error.

Una vez que reciba una respuesta correcta desde el punto de conexión de aprovisionamiento de la aplicación, esta habrá obtenido los permisos de aplicación directos que solicitó.After you've received a successful response from the app provisioning endpoint, your app has gained the direct application permissions that it requested. Ahora puede solicitar un token para el recurso que desee.Now you can request a token for the resource that you want.

Obtención de un tokenGet a token

Una vez que obtenga la autorización necesaria para la aplicación, siga con el proceso de adquisición de tokens de acceso para las API.After you've acquired the necessary authorization for your application, proceed with acquiring access tokens for APIs. Para obtener un token mediante la concesión de credenciales de cliente, envíe una solicitud POST al punto de conexión de la Plataforma de identidad de Microsoft /token:To get a token by using the client credentials grant, send a POST request to the /token Microsoft identity platform endpoint:

Sugerencia

Pruebe a ejecutar esta solicitud en PostmanTry executing this request in Postman! (Use su propio identificador de aplicación para obtener mejores resultados; la aplicación del tutorial no solicitará permisos útiles). Pruebe a ejecutar esta solicitud en Postman(Use your own app ID for best results - the tutorial application won't request useful permissions.) Try running this request in Postman

Primer caso: solicitud de token de acceso con un secreto compartidoFirst case: Access token request with a shared secret

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

client_id=535fb089-9ff3-47b6-9bfb-4f1264799865
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret=qWgdYAmab0YSkuL1qKv5bPX
&grant_type=client_credentials
# Replace {tenant} with your tenant!
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'client_id=535fb089-9ff3-47b6-9bfb-4f1264799865&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&client_secret=qWgdYAmab0YSkuL1qKv5bPX&grant_type=client_credentials' 'https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token'
ParámetroParameter CondiciónCondition DescripciónDescription
tenant ObligatorioRequired El inquilino del directorio en el que va a funcionar la aplicación, con el formato de GUID o de nombre de dominio.The directory tenant the application plans to operate against, in GUID or domain-name format.
client_id ObligatorioRequired El identificador de la aplicación que está asignado a la aplicación.The application ID that's assigned to your app. Puede encontrar esta información en el portal donde registró la aplicación.You can find this information in the portal where you registered your app.
scope ObligatorioRequired El valor pasado del parámetro scope en esta solicitud debe ser el identificador de recurso (URI de identificador de aplicación) del recurso que desea, con el sufijo .default.The value passed for the scope parameter in this request should be the resource identifier (application ID URI) of the resource you want, affixed with the .default suffix. Para el ejemplo de Microsoft Graph, el valor es https://graph.microsoft.com/.default.For the Microsoft Graph example, the value is https://graph.microsoft.com/.default.
Este valor indica al punto de conexión de la Plataforma de identidad de Microsoft que, de todos los permisos directos de la aplicación que ha configurado para la aplicación, debe emitir un token para los que están asociados con el recurso que quiere usar.This value tells the Microsoft identity platform endpoint that of all the direct application permissions you have configured for your app, the endpoint should issue a token for the ones associated with the resource you want to use. Para más información sobre el ámbito /.default, consulte la documentación de consent.To learn more about the /.default scope, see the consent documentation.
client_secret ObligatorioRequired El secreto de cliente que generó para la aplicación en el portal de registro de aplicaciones.The client secret that you generated for your app in the app registration portal. El secreto de cliente debe codificarse como dirección URL antes de enviarse.The client secret must be URL-encoded before being sent.
grant_type ObligatorioRequired Se debe establecer en client_credentials.Must be set to client_credentials.

Segundo caso: solicitud de token de acceso con un certificadoSecond case: Access token request with a certificate

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

scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_id=97e0a5b7-d745-40b6-94fe-5f77d35c6e05
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJ{a lot of characters here}M8U3bSUKKJDEg
&grant_type=client_credentials
ParámetroParameter CondiciónCondition DescripciónDescription
tenant ObligatorioRequired El inquilino del directorio en el que va a funcionar la aplicación, con el formato de GUID o de nombre de dominio.The directory tenant the application plans to operate against, in GUID or domain-name format.
client_id ObligatorioRequired El identificador de aplicación (cliente) que se asigna a la aplicación.The application (client) ID that's assigned to your app.
scope ObligatorioRequired El valor pasado del parámetro scope en esta solicitud debe ser el identificador de recurso (URI de identificador de aplicación) del recurso que desea, con el sufijo .default.The value passed for the scope parameter in this request should be the resource identifier (application ID URI) of the resource you want, affixed with the .default suffix. Para el ejemplo de Microsoft Graph, el valor es https://graph.microsoft.com/.default.For the Microsoft Graph example, the value is https://graph.microsoft.com/.default.
Este valor indica al punto de conexión de la Plataforma de identidad de Microsoft que, de todos los permisos directos de la aplicación que ha configurado para la aplicación, debe emitir un token para los que están asociados con el recurso que quiere usar.This value informs the Microsoft identity platform endpoint that of all the direct application permissions you have configured for your app, it should issue a token for the ones associated with the resource you want to use. Para más información sobre el ámbito /.default, consulte la documentación de consent.To learn more about the /.default scope, see the consent documentation.
client_assertion_type ObligatorioRequired El valor se debe establecer en urn:ietf:params:oauth:client-assertion-type:jwt-bearer.The value must be set to urn:ietf:params:oauth:client-assertion-type:jwt-bearer.
client_assertion ObligatorioRequired Una aserción (JSON Web Token) que debe crear y firmar con el certificado que ha registrado como credenciales de la aplicación.An assertion (a JSON web token) that you need to create and sign with the certificate you registered as credentials for your application. Lea el artículo sobre las credenciales de certificado para información sobre cómo registrar el certificado y el formato de la aserción.Read about certificate credentials to learn how to register your certificate and the format of the assertion.
grant_type ObligatorioRequired Se debe establecer en client_credentials.Must be set to client_credentials.

Tenga en cuenta que los parámetros son casi iguales que en el caso de solicitud con un secreto compartido, salvo que el parámetro client_secret se sustituye por dos parámetros: client_assertion_type y client_assertion.Notice that the parameters are almost the same as in the case of the request by shared secret except that the client_secret parameter is replaced by two parameters: a client_assertion_type and client_assertion.

Respuesta correctaSuccessful response

Una respuesta correcta tiene el siguiente aspecto:A successful response looks like this:

{
  "token_type": "Bearer",
  "expires_in": 3599,
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBP..."
}
ParámetroParameter DescripciónDescription
access_token El token de acceso solicitado.The requested access token. La aplicación puede usar este token para autenticarse en el recurso protegido, como una API web.The app can use this token to authenticate to the secured resource, such as to a web API.
token_type Indica el valor de tipo de token.Indicates the token type value. El único tipo que la Plataforma de identidad de Microsoft admite es bearer.The only type that Microsoft identity platform supports is bearer.
expires_in La cantidad de tiempo que un token de acceso es válido (en segundos).The amount of time that an access token is valid (in seconds).

Respuesta de errorError response

Una respuesta de error tiene el aspecto siguiente:An error response looks like this:

{
  "error": "invalid_scope",
  "error_description": "AADSTS70011: The provided value for the input parameter 'scope' is not valid. The scope https://foo.microsoft.com/.default 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"
}
ParámetroParameter DescripciónDescription
error Una cadena de código de error que puede usar para clasificar los tipos de errores que se producen y para reaccionar ante ellos.An error code string that you can use to classify types of errors that occur, and to react to errors.
error_description Un mensaje de error específico que podría ayudarlo a identificar la causa raíz de un error de autenticación.A specific error message that might help you identify the root cause of an authentication error.
error_codes Una lista de los códigos de error específicos de STS que podrían ayudar en los diagnósticos.A list of STS-specific error codes that might help with diagnostics.
timestamp La hora a la que se produjo el error.The time when the error occurred.
trace_id Un identificador único de la solicitud para ayudar con los diagnósticos.A unique identifier for the request to help with diagnostics.
correlation_id Un identificador único de la solicitud para ayudar con los diagnósticos entre componentes.A unique identifier for the request to help with diagnostics across components.

Uso de un tokenUse a token

Ahora que adquirió un token, úselo para hacer solicitudes al recurso.Now that you've acquired a token, use the token to make requests to the resource. Cuando expire el token, repita la solicitud al punto de conexión /token para adquirir un token de acceso nuevo.When the token expires, repeat the request to the /token endpoint to acquire a fresh access token.

GET /v1.0/me/messages
Host: https://graph.microsoft.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
# Pro tip: Try the following command! (Replace the token with your own.)

curl -X GET -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbG...." 'https://graph.microsoft.com/v1.0/me/messages'

Ejemplos de código y otra documentaciónCode samples and other documentation

Lea la documentación en la que se describen de forma general las credenciales del cliente en la Biblioteca de autenticación de MicrosoftRead the client credentials overview documentation from the Microsoft Authentication Library

MuestraSample PlataformaPlatform DescripciónDescription
active-directory-dotnetcore-daemon-v2active-directory-dotnetcore-daemon-v2 Consola de .NET Core 2.1.NET Core 2.1 Console Una aplicación de .NET Core sencilla que muestra los usuarios de un inquilino que consultan Microsoft Graph mediante la identidad de la aplicación, en lugar hacerlo en nombre de un usuario.A simple .NET Core application that displays the users of a tenant querying the Microsoft Graph using the identity of the application, instead of on behalf of a user. El ejemplo también muestra la variación del uso de certificados para la autenticación.The sample also illustrates the variation using certificates for authentication.
active-directory-dotnet-daemon-v2active-directory-dotnet-daemon-v2 ASP.NET MVCASP.NET MVC Una aplicación web que sincroniza datos de Microsoft Graph mediante la identidad de la aplicación, en lugar hacerlo en nombre de un usuario.A web application that syncs data from the Microsoft Graph using the identity of the application, instead of on behalf of a user.