Ritiro dell'API Graph di Microsoft Entra ID
L'ID Microsoft Entra (in precedenza Azure Active Directory o Azure AD), il servizio API Graph viene ritirato. Questo ritiro fa parte di un impegno più ampio per semplificare la piattaforma Microsoft Entra ID e migliorare l'esperienza di sviluppo di Microsoft Entra ID.
Passaggi di mitigazione
Il ritiro dell'API Graph interessa tutti i clienti dell'hub di Azure Stack che usano Entra ID come provider di identità e richiede l'esecuzione dello script incluso in questo articolo per tutte le applicazioni interessate. Se si dispone di applicazioni che necessitano di accesso continuo alle API Graph, lo script imposta un flag che configura queste applicazioni per un'estensione che consente a queste applicazioni specifiche di continuare a chiamare l'API Graph legacy fino a giugno 2025.
Lo script di PowerShell fornito in questo articolo imposta un flag per ogni applicazione per configurare l'estensione API Graph per ogni provider di identità Entra ID dell'hub di Azure Stack.
Per assicurarsi che gli ambienti dell'hub di Azure Stack che usano Entra ID come provider di identità continuino a funzionare, è necessario eseguire questo script entro la fine di febbraio 2025.
Nota
Se si ritarda l'aggiunta di questo flag oltre febbraio 2025, l'autenticazione avrà esito negativo. È quindi possibile eseguire questo script per assicurarsi che l'hub di Azure Stack funzioni in base alle esigenze.
Eseguire lo script
Eseguire lo script di PowerShell seguente nell'ambiente Entra ID usato dall'hub di Azure Stack come "home directory" (il provider di identità principale dell'hub di Azure Stack). Lo script interagisce con Azure, quindi non è necessario eseguirlo in un computer specifico. Per eseguire lo script, tuttavia, sono necessari almeno privilegi di "amministratore dell'applicazione" nel rispettivo tenant entra ID.
Assicurarsi di eseguire lo script seguente con privilegi di amministratore nel computer locale:
# 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 }
}
}
Lo script visualizza l'output di esempio seguente:
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)
Eseguire lo script una seconda volta per verificare che tutte le applicazioni siano state aggiornate. Lo script deve restituire l'output seguente se tutte le applicazioni sono state aggiornate correttamente:
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