Hoy un par de compañeros me han planteado un escenario donde necesitaban recuperar un access token desde un script, para acceder a ciertos recursos de Microsoft Azure. Existen diferentes formas de hacerlo, ya que simplemente se trata de llevar a cabo una llamada HTTP a Azure AD, indicándole los parámetros necesarios para la negociación de OAuth. En este artículo te cuento cómo hacerlo de una forma súper fácil con Azure CLI.
Aplicación registrada en Azure AD
Lo primero que necesitas es tener registrada una aplicación en Azure Active Directory, que será la que Azure CLI utilice para recuperar el access token. Para ello, debes ir al apartado App Registrations y crear una nueva. Dentro de la misma, necesitas establecer una URI para tu App. Si vas al apartado Expose an API puedes generarla desde ahí haciendo clic en el enlace Set:

Por otro lado, también tienes que crear un secreto en el apartado Certificates & Secrets:

Por último, necesitamos asociar algún permiso a esta aplicación para el cual queramos recuperar el token. Ya por defecto tenemos permisos para Microsoft Graph, con el scope User.Read. Para este ejemplo voy a añadir un permiso para Azure DevOps como ejemplo:

Recupera el token con Azure CLI
Los pasos que necesitas para recuperar el token son tan solo dos:
1. Inicia sesión con tu aplicación registrada:
az login --service-principal -u TU_APP_URL -p TU_SECRETO --tenant TU_TENANT.onmicrosoft.com --allow-no-subscriptions
El usuario será la URI de tu aplicación registrada, la contraseña tu client secret, necesitas especificar tu tenant y, si es el caso, decirle que no importa que no tenga suscripciones asociadas este service principal.
2. Recupera el token:
az account get-access-token --resource https://app.vssps.visualstudio.com/ --subscription "NOMBRE_O_ID_DE_TU_SUSCRIPCIÓN"
Si te has autenticado correctamente, y tienes los permisos necesarios, se te devolverá un access token válido:

Si quieres recuperar el resto de los endpoints disponibles para el valor de resource puedes hacerlo con el comando az cloud show.
¡Saludos!