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 valorclient_credentials
client_id
con el valor deApplication (client) ID
client_secret
con el valor deClient Secret
scope
con el valorhttps://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íahttps://graph.microsoft.com/.default
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 enCertificates & 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.
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.