| | 0

Erzeugen des Bearer Tokens für die Authentifizierung gegen Azure über REST mit Benutzername und Passwort – Machbarkeitstest

Es ist nicht so einfach, den Bearer Token für die Authentifizierung gegen Azure mal eben schnell zu erhalten. Gebraucht wird er jedoch für REST Calls gegen die Azure Dienste – und hier gibt es einige Funktionen, die über PowerShell nicht direkt erreichbar sind.

Standardgemäß wird eine Anwendung erstellt, die vor der Authentifizierung im Azure AD registriert werden muss. Es gibt jedoch einen weiteren Weg, den PowerShell benutzt: Der Befehl „Login-AzureRmAccount“ meldet einen Benutzer an Azure direkt an – nur mit Name und Passwort und ohne Registrierung. Leider gibt er jedoch nicht das Token zurück. Der PowerShell Befehl benutzt eine integrierte „well-known“ Client ID, mit der diese Authentifizierung gelingt. Daran angelehnt ermöglicht folgende Vorgehensweise die Ermittlung des Tokens:

1
2
3
4
5
6
7
8
9
10
$AccountName ="srvAccount-Desktops@xxxxxxxxxxxxxxxxxxxxxxx.onmicrosoft.com"
$Password = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
$Response=Invoke-WebRequest -Uri "https://login.microsoftonline.com/Common/oauth2/token" -Method POST -Body $PayLoad
$ResponseJSON=$Response|ConvertFrom-Json
$ResponseJSON

Achtung: Diese Methode ist nur fürs Testen. Ändert Microsoft etwas, kann diese Methode nicht mehr funktionieren. Ich bin mir auch nicht sicher, ob es erlaubt/gewollt ist, die Client ID zu verwenden.

Empfehlung: Ich verwende einen Funktions Account im zugehörigen Azure AD. Damit verhindere ich Probleme, die bei der Verwendung meines Accounts marcel.meurer@sepago.de entstehen können. Grund ist, dass mein Account sowohl ein persönlicher als auch ein Business Account ist und die Zuordnung über diesen Weg nicht gelingt.

Ein kurzer Test: Anzeigen aller Subscriptions in dem der Account berechtigt ist:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$Headers = New-Object "System.Collections.Generic.Dictionary"
$Headers.Add("Authorization", "Bearer "+$ResponseJSON.access_token)
$ResponseSubscriptions=Invoke-WebRequest -Uri "https://management.azure.com/subscriptions?api-version=2015-01-01" -Method GET -Headers $Headers
$ResponseSubscriptionsJSON=$ResponseSubscriptions|ConvertFrom-Json
$ResponseSubscriptionsJSON.value
Output:
--------------------------------------------
id                   : /subscriptions/31x00b3-9b23-451c-a041-xxxxxxxaead
subscriptionId       : 31xx00b3-9b23-451c-a041-xxxxxxxxxxaead
displayName          : Microsoft MVP Program
state                : Enabled
subscriptionPolicies : @{locationPlacementId=Public_2014-09-01; quotaId=MSDN_2014-09-01; spendingLimit=On}