Azure Access Token con Postman o Insomnia

Cómo obtener un access token para la API REST de Azure usando Client Credentials

Usar la API REST de Azure no suele ser mi primera opción. Pero a veces no queda más remedio. Y cuando llega el momento de hacerlo, siempre me cuesta recordar cómo obtener un access_token.

A veces, (y para el post voy a fingir que quiero ver las metricas disponibles para un recurso) acabo aterrizando en la referencia de la API REST, por ejemplo https://learn.microsoft.com/en-us/rest/api/monitor/metric-definitions/list (no sé, échale la culpa a Google).

Después uso el maravilloso botón de Try it (que te permite seleccionar cuenta y subscripción) y cuando me convenzo que la API REST es lo que necesito o, simplemente, quiero seguir explorando la API en una herramienta como Postman o Insomnia, me encuentro con que no recuerdo (o lo hago pero quiero que me cueste menos recordarlo) cómo obtener un access_token con el flujo Client Credentials.

Así que aquí va un pequeño recordatorio de cómo hacerlo con Postman o Insomnia.

Lo que vamos a ver es un shortcut para no tener que hacerlo a mano https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-client-creds-grant-flow#first-case-access-token-request-with-a-shared-secret

A mano, simplemente tendríamos que hacer un POST a https://login.microsoftonline.com/<subscriptionId>/oauth2/v2.0/token y pasar en el body los siguientes parámetros:

  • grant_type con el valor client_credentials
  • client_id con el valor de Application (client) ID
  • client_secret con el valor de Client Secret
  • scope con el valor https://management.azure.com/.default
$body = @{
    grant_type    = "client_credentials"
    client_id     = "YOUR_CLIENT_ID"
    client_secret = "YOUR_CLIENT_SECRET"
    scope         = "https://management.azure.com/.default"
}

$access_token = (Invoke-RestMethod -Method Post -Uri "https://login.microsoftonline.com/YOUR_SUBSCRIPTION_ID/oauth2/v2.0/token" -ContentType "application/x-www-form-urlencoded" -Body $body).access_token

Si en vez de a ARM quieres conectar a Microsoft Graph API, el valor de scope sería https://graph.microsoft.com/.default

Postman manual

Adicionalmente, si quieres obtener el access_token con Azure CLI, también es muy sencillo:

az login --service-principal --tenant YOUR_TENANT_ID --username YOUR_CLIENT_ID --password YOUR_SECRET --allow-no-subscriptions
az account get-access-token --query accessToken # ARM
az account get-access-token --resource-type ms-graph --query accessToken # Microsoft Graph API

En cualquier caso y como somos muy vagos, vamos a ver como hacerlo con un poco de ayuda de estas 2 herramientas.

Con independencia de cómo lo hagamos, siempre vamos a necesitar crear un nuevo App registration en Microsoft Entra ID y guardar los siguientes valores:

  • Application (client) ID
  • Directory (tenant) ID
  • Client Secret (que se crea en Certificates & secrets).

Además, ya que estamos allí también podemos guardar el valor de OAuth 2.0 token endpoint (v2) accesible desde el botón Endpoints.

En nuestro ejemplo, tenemos que asignar el rol Monitoring Reader al App registration en el recurso que queremos monitorizar o a nivel de subscripción https://learn.microsoft.com/en-us/azure/azure-monitor/roles-permissions-security

Ok, por ahora tenemos un App registration con los permisos adecuados, así que vamos a por el access_token.

Insomnia

Bastante sencillo, basta con seleccionar OAuth 2.0 como tipo de autenticación y especificar ACCESS TOKEN URL, CLIENT ID, CLIENT SECRET y SCOPE. Después, pulsar en el botón Fetch Tokens y listo.

Insomnia

Postman

En Postman también es muy sencillo (Gran Type, Access Token URL, Client ID, Client Secret y Scope) e incluso después nos sugerirá usar el token obtenido automáticamente.

Postman


Ver también