Wycofanie interfejsu API programu Graph w usłudze Microsoft Entra ID
Identyfikator Microsoft Entra (dawniej Azure Active Directory lub Azure AD) usługa Graph API jest wycofywana. Wycofanie jest częścią szerszego wysiłku w celu uproszczenia platformy Microsoft Entra ID oraz poprawy doświadczenia programistycznego w Microsoft Entra ID.
Kroki łagodzące
Wycofanie interfejsu API programu Graph wpływa na wszystkich klientów usługi Azure Stack Hub korzystających z identyfikatora Entra jako dostawcy tożsamości i wymaga uruchomienia skryptu zawartego w tym artykule dla wszystkich aplikacji, których to dotyczy. Jeśli masz aplikacje, które wymagają dalszego dostępu do interfejsów API programu Graph, skrypt ustawia flagę, która konfiguruje te aplikacje dla rozszerzenia, które umożliwia tym konkretnym aplikacjom dalsze wywoływanie starszego interfejsu API programu Graph do czerwca 2025 r.
Skrypt PowerShell podany w tym artykule ustawia flagę dla każdej aplikacji, aby skonfigurować rozszerzenie interfejsu API usługi Graph dla każdego dostawcy tożsamości Entra ID w Azure Stack Hub.
Aby upewnić się, że środowiska usługi Azure Stack Hub używające identyfikatora Entra jako dostawcy tożsamości nadal działają, należy uruchomić ten skrypt do końca lutego 2025 r.
Notatka
Jeśli opóźnisz dodawanie tej flagi poza lutym 2025 r., uwierzytelnianie zakończy się niepowodzeniem. Następnie możesz uruchomić ten skrypt, aby upewnić się, że usługa Azure Stack Hub działa zgodnie z potrzebami.
Uruchamianie skryptu
Uruchom następujący skrypt programu PowerShell w środowisku Entra ID, które jest używane przez usługę Azure Stack Hub jako "katalog główny" (główny dostawca tożsamości usługi Azure Stack Hub). Skrypt współdziała z platformą Azure, więc nie musisz uruchamiać go na określonej maszynie. Do uruchomienia skryptu potrzebne są co najmniej uprawnienia administratora aplikacji w odpowiednim dzierżawcy Entra ID.
Pamiętaj, aby uruchomić następujący skrypt z uprawnieniami administratora na komputerze lokalnym:
# 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 }
}
}
Skrypt wyświetla następujące przykładowe dane wyjściowe:
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)
Uruchom skrypt po raz drugi, aby sprawdzić, czy wszystkie aplikacje zostały zaktualizowane. Skrypt powinien zwrócić następujące dane wyjściowe, jeśli wszystkie aplikacje zostały pomyślnie zaktualizowane:
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