Table of Contents

Das Legacy Problem

Wenn man genau diese Frage stellt, findet man Online leider noch sehr viele Lösungen mit alten PowerShell Modulen (Azure AD, Azure AD Preview, MSOL), die deprecated werden

Entsprechend hier eine kleine Sammlung der neuen Wege über die PowerShell Graph SDK.

! Notwendige Permissions finden sich am leichtesten via Find-MgGraphCommand "<CmdLet>"


EIGENES Kennwort ändern, wenn man das alte kennt

Das ist so ziemlich das erste das man wahrscheinlich in der API Dokumentation findet;

! Wichtig: Dieser Endpunkt kann nur bei dem aktuell gegen die Graph API Authentifizierten Benutzer genutzt werden !

# Es kann der Benutzerprinzipalname (UPN) oder die Objekt-ID (OID) verwendet werden
# Wichtig: Es muss der aktuell authentifizierte Benutzer sein
$userId = (Get-MgContext).Account
$params = @{
    currentPassword = "<Aktuelles_Passwort>"
    newPassword = "<Neues_Passwort>"
}
Update-MgUserPassword -UserId $userId -BodyParameter $params

# Alternative ohne Microsoft.Graph.Users.Actions Modul:
Invoke-MgGraphRequest POST "/v1.0/me/changePassword" -Body $params

Die Einsatzzwecke sind limitiert, weil man sich vorab gegen die Graph API Authentifizieren muss, nur um dann noch mal das Kennwort anzugeben. Oder ich bin zu unkreativ.

Viel interessanter ist wahrscheinlich:


Als Admin das Kennwort eines Benutzers Setzen

Diese Möglichkeit wird in der Dokumentation und im Diskurs leicht übersehen. Man kann das Kennwort eines Benutzers setzen, ohne dass er es beim nächsten Login ändern muss.

Wenn man nicht gerade bspw. automatisch das Kennwort eines Service Accounts rotiert oder einen anderen sehr guten Grund hat, sollte forceChangePasswordNextSignIn = $true genutzt werden

Möchte man die Änderung über die Enterprise Applikation umsetzen ist die Zuweisung einer Entra ID Admin Rolle notwendig

Permission Prerequisites


# Es kann der Benutzerprinzipalname (UPN) oder die Objekt-ID (OID) verwendet werden
$userId = "<BenutzerId>"

$params = @{
  passwordProfile = @{
    forceChangePasswordNextSignIn = $false
    password = "<Neues_Passwort>"
  }
}

Update-MgUser -UserId $userId -BodyParameter $params

# Ohne Zusätzliches Modul
Invoke-MgGraphRequest PATCH "/v1.0/users/$userId" -Body $params


Als Admin das Kennwort eines anderen Benutzers Ändern

Mit einer entsprechenden Entra ID Admin Rolle kann man über die API bei anderen Benutzern die Authentifizierungsmethode ändern.

! Wichtig: Über diesen Endpunkt kann man nicht sein eigenes Kennwort zurücksetzen !

Achtung – das zurücksetzen von Kennwörtern über diesen Endpunkt ist nur über delegate Permissions möglich – es kann nicht mit Application Permissions ein Kennwort zurückgesetzt werden

"UserAuthenticationMethod.ReadWrite.All" gibt schreibrechte für Microsoft Authenticator, FIDO Keys, … auch von privilegierten Benutzern!
Ein Angreifer mit einer solchen App Registration kann z.B. den Authenticator eines Global Admins entfernen

# Optional, gibt man den Parameter nicht an wird Entra ID als Antwort ein selbstgeneriertes Kennwort liefern
# Das hier gesetzte Kennwort muss der Benutzer sofort ändern
$params = @{newPassword = "<Neues_Passwort>"}

# Es kann der Benutzerprinzipalname (UPN) oder die Objekt-ID (OID) verwendet werden
$userId = "<BenutzerId>"

# Authentication Methode "Passwort" hat statisch diese ID
$authMethodId = "28c10230-6103-485e-b985-444c60001490"

Reset-MgUserAuthenticationMethodPassword -UserId $userId -AuthenticationMethodId $authMethodId -BodyParameter $params

# Ohne Microsoft.Graph.Users.Actions:
Invoke-MgGraphRequest POST "/v1.0/users/$userId/authentication/methods/$authMethodId/resetPassword" -Body $params


Gibt man kein Initialpasswort an, sollte man die Antwort für weitere Verarbeitung abfangen:

$res = Reset-MgUserAuthenticationMethodPassword -UserId $userId -AuthenticationMethodId $authMethodId
$res = Invoke-MgGraphRequest POST "/v1.0/users/$userId/authentication/methods/$authMethodId/resetPassword" 

$res.NewPassword

Ergebnis:

PasswordOutput


Abschließende Worte

Hoffentlich konnte ich ein wenig Verwirrung auflösen oder bei der Ablösung der alten Module helfen – ich habe mich mit dem Thema auseinander gesetzt weil ich ein Initialkennwort für eine PAM Lösung setzen wollte und eher unglücklich mit den Artikeln war, die ich gefunden habe. Wenn es noch etwas bei diesem zu verbessern gibt, sag mir bitte bescheid.


Ich werde keine Kommentare moderieren und möchte Ihre E-Mail-Adresse nicht; bitte beteiligen Sie sich an der Diskussion über meinen Zugehörigen LinkedIn Post.


Wenn sie an den Dingen interessiert sind die ich tue folgen sie mir auf LinkedIn.


Zuletzt bearbeitet: 5. Januar 2024