Einstellung der Microsoft Entra ID Graph-API
Der für Microsoft Entra ID (früher Azure Active Directory oder Azure AD) bereitgestellte Graph-API-Dienst wird eingestellt. Diese Abschaffung ist Teil eines umfassenderen Aufwands, um die Microsoft Entra ID-Plattform zu optimieren und das Entwicklererlebnis mit Microsoft Entra ID zu verbessern.
Schritte zur Problembehebung
Die Einstellung der Graph-API wirkt sich auf alle Azure Stack Hub-Kunden aus, die Entra ID als Identitätsanbieter verwenden. Es ist erforderlich, dass Sie das in diesem Artikel enthaltene Skript für alle betroffenen Anwendungen ausführen. Wenn Sie über Anwendungen verfügen, die weiterhin Zugriff auf die Graph-APIs benötigen, legt das Skript ein Flag fest, das diese Anwendungen für eine Erweiterung konfiguriert, mit der diese spezifischen Anwendungen die Legacy-Graph-API bis Juni 2025 weiterhin aufrufen können.
Das in diesem Artikel bereitgestellte PowerShell-Skript legt ein Flag für jede Anwendung fest, um die Graph-API-Erweiterung für jeden Entra ID-Identitätsanbieter von Azure Stack Hub zu konfigurieren.
Um sicherzustellen, dass Ihre Azure Stack Hub-Umgebungen, die Entra ID als Identitätsanbieter verwenden, weiterhin funktionieren, sollten Sie dieses Skript bis Ende Februar 2025 ausführen.
Hinweis
Wenn Sie dieses Flag erst nach Februar 2025 hinzufügen, tritt bei der Authentifizierung ein Fehler auf. Anschließend können Sie dieses Skript ausführen, um sicherzustellen, dass Azure Stack Hub wie gewünscht funktioniert.
Ausführen des Skripts
Führen Sie das folgende PowerShell-Skript in Ihrer Entra ID-Umgebung aus, die von Azure Stack Hub als „Startverzeichnis“ (Hauptidentitätsanbieter von Azure Stack Hub) verwendet wird. Das Skript interagiert mit Azure, sodass Sie es nicht auf einem bestimmten Computer ausführen müssen. Sie benötigen jedoch mindestens Berechtigungen vom Typ „Anwendungsadmin“ im entsprechenden Entra ID-Mandanten, um das Skript auszuführen.
Führen Sie das folgende Skript unbedingt mit Administratorrechten auf dem lokalen Computer aus:
# Install the graph modules if necessary
#Install-Module Microsoft.Graph.Authentication
#Install-Module Microsoft.Graph.Applications
$ErrorActionPreference='Stop'
Import-Module Microsoft.Graph.Authentication
Import-Module Microsoft.Graph.Applications
# Repeat this flow for each of your target directory tenants
$tenantId = 'MyTenantId'
# Sign-in with admin permissions to read and write all application objects
Connect-MgGraph -TenantId $tenantId -Scopes Application.ReadWrite.All
# Retrieve all applications in the current directory
Write-Host "Looking-up all applications in directory '$tenantId'..."
$applications = Get-MgApplication -All -Property id, displayName, appId, identifierUris, requiredResourceAccess, authenticationBehaviors
Write-Host "Found '$($applications.Count)' total applications in directory '$tenantId'"
# Find all the unique deployment guids, each one representing an Azure Stack deployment in the current directory
$deploymentGuids = $applications.IdentifierUris |
Where-Object { $_ -like 'https://management.*' -or $_ -like 'https://adminmanagement.*' } |
ForEach-Object { "$_".Split('/')[3] } |
Select-Object -Unique
Write-Host "Found '$($deploymentGuids.Count)' total Azure Stack deployments in directory '$tenantId'"
# Find all the Azure Stack application objects for each deployment
$azureStackApplications = @()
foreach ($application in $applications)
{
foreach ($deploymentGuid in $deploymentGuids)
{
if (($application.IdentifierUris -join '') -like "*$deploymentGuid*")
{
$azureStackApplications += $application
}
}
}
# Find which Azure Stack applications require access to Legacy Graph Service
$azureStackLegacyGraphApplications = $azureStackApplications |
Where-Object { $_.RequiredResourceAccess.ResourceAppId -contains '00000002-0000-0000-c000-000000000000' }
# Find which of those applications need to have their authentication behaviors patched to allow access to Legacy Graph
$azureStackLegacyGraphApplicationsToUpdate = $azureStackLegacyGraphApplications |
Where-Object { -not ($ab = $_.AdditionalProperties.authenticationBehaviors) -or -not $ab.ContainsKey(($key='blockAzureADGraphAccess')) -or $ab[$key] }
# Update the applications which require their authentication behaviors patched to allow access to Legacy Graph
Write-Host "Found '$($azureStackLegacyGraphApplicationsToUpdate.Count)' total Azure Stack applications which need permission to continue calling Legacy Microsoft Graph Service"
$count = 0
foreach ($application in $azureStackLegacyGraphApplicationsToUpdate)
{
$count++
Write-Host "$count/$($azureStackLegacyGraphApplicationsToUpdate.Count) - Updating application '$($application.DisplayName)' (appId=$($application.AppId)) (id=$($application.Id))"
Update-MgApplication -ApplicationId $application.Id -BodyParameter @{
authenticationBehaviors = @{ blockAzureADGraphAccess = $false }
}
}
Das Skript zeigt die folgende Beispielausgabe an:
Looking-up all applications in directory '<ID>'...
Found '###' total applications in directory '<ID>'
Found '1' total Azure Stack deployments in directory '<app ID>'
Found '16' total Azure Stack applications which need permission to continue calling Legacy Microsoft Graph Service
1/16 - Updating application 'Azure Stack - AKS' (appId=<app ID>) (id=<ID>)
2/16 - Updating application 'Azure Stack - Hubs' (appId=<app ID>) (id=<ID>)
3/16 - Updating application 'Azure Stack - Portal Administration' (appId=<app ID>) (id=<app>)
4/16 - Updating application 'Azure Stack - RBAC Administration' (appId=<app ID>) (id=ID)
5/16 - Updating application 'Azure Stack - Container Registry' (appId=<app ID>) (id=ID)
6/16 - Updating application 'Azure Stack - RBAC' (appId=<app ID>) (id=ID)
7/16 - Updating application 'Azure Stack - Hubs Administration' (appId=<app ID>) (id=ID)
8/16 - Updating application 'Azure Stack - Deployment Provider' (appId=<app ID>) (id=ID)
9/16 - Updating application 'Azure Stack - Deployment' (appId=<app ID>) (id=ID)
10/16 - Updating application 'Azure Stack - KeyVault' (appId=<app ID>) (id=ID)
11/16 - Updating application 'Azure Stack' (appId=<app ID>) (id=ID)
12/16 - Updating application 'Azure Stack - Administration' (appId=<app ID>) (id=ID)
13/16 - Updating application 'Azure Stack - Policy Administration' (appId=<app ID>) (id=ID)
14/16 - Updating application 'Azure Stack - Policy' (appId=<app ID>) (id=ID)
15/16 - Updating application 'Azure Stack - Portal' (appId=<app ID>) (id=ID)
16/16 - Updating application 'Azure Stack - KeyVault Administration ' (appId=<app ID>) (id=ID)
Führen Sie das Skript ein zweites Mal aus, um zu überprüfen, ob alle Anwendungen aktualisiert wurden. Das Skript sollte die folgende Ausgabe zurückgeben, wenn alle Anwendungen erfolgreich aktualisiert wurden:
Looking-up all applications in directory '<ID>'...
Found '####' total applications in directory '<ID>>'
Found '1' total Azure Stack deployments in directory '<ID>>'
Found '0' total Azure Stack applications which need permission to continue calling Legacy Microsoft Graph Service