Risoluzione dei problemi relativi ai limiti delle autorizzazioni configurate

La RequiredResourceAccess raccolta (RRA) in un oggetto applicazione contiene tutte le autorizzazioni API configurate richieste da un'app per la richiesta di consenso predefinita. Questa raccolta presenta diversi limiti a seconda dei tipi di identità supportati dall'app. Per altre informazioni sui limiti per i tipi di account supportati, vedere Differenze di convalida in base ai tipi di account supportati.

I limiti per le autorizzazioni massime sono stati aggiornati a maggio 2022, quindi alcune app potrebbero avere più autorizzazioni nella RRA rispetto a quelle consentite. Inoltre, le app che modificano i tipi di account supportati dopo la configurazione delle autorizzazioni possono superare i limiti della nuova impostazione. Quando le app superano il limite di autorizzazioni configurate, non è possibile aggiungere nuove autorizzazioni fino a quando il numero di autorizzazioni nella RequiredResourceAccess raccolta non viene riportato sotto i limiti.

Questo documento offre informazioni aggiuntive e procedure di risoluzione dei problemi per risolvere il problema.

Identificazione quando un'app ha superato i RequiredResourceAccess limiti

In generale, tutte le applicazioni con più di 400 autorizzazioni hanno superato i limiti di configurazione. Le app possono anche essere soggette a limiti inferiori se supportano l'accesso per gli account Microsoft personali. Un'app che ha superato i limiti di autorizzazione riceverà l'errore seguente quando si tenta di aggiungere altre autorizzazioni nel portale di Azure:

Failed to save permissions for <AppName>. This configuration exceeds the global application object limit. Remove some items and retry your request.

Procedura per la risoluzione

Se l'applicazione non è più necessaria, la prima opzione da considerare consiste nell'eliminare completamente la registrazione dell'app. È possibile ripristinare le applicazioni eliminate di recente, nel caso in cui si rilevi subito dopo che era ancora necessario.

Se l'applicazione è ancora necessaria o non si è certi, la procedura seguente consente di risolvere questo problema:

  1. Rimuovere le autorizzazioni duplicate. In alcuni casi, la stessa autorizzazione viene elencata più volte. Esaminare le autorizzazioni necessarie e rimuovere le autorizzazioni elencate due o più volte. Vedere lo script di PowerShell correlato nella sezione risorse aggiuntive di questo articolo.
  2. Rimuovere le autorizzazioni inutilizzate. Esaminare le autorizzazioni richieste dall'applicazione e confrontarle con le operazioni dell'applicazione o del servizio. Rimuovere le autorizzazioni configurate nella registrazione dell'app, ma che l'applicazione o il servizio non richiede. Per altre informazioni su come esaminare le autorizzazioni, vedere Esaminare le autorizzazioni dell'applicazione
  3. Rimuovere le autorizzazioni ridondanti. In molte API, tra cui Microsoft Graph, alcune autorizzazioni non sono necessarie quando sono incluse altre autorizzazioni con privilegi. Ad esempio, l'autorizzazione Microsoft Graph User.Read.All (lettura tutti gli utenti) non è necessaria quando un'applicazione ha anche User.ReadWrite.All (lettura, creazione e aggiornamento di tutti gli utenti). Per altre informazioni sulle autorizzazioni di Microsoft Graph, vedere Informazioni di riferimento sulle autorizzazioni di Microsoft Graph.

Domande frequenti

Perché Microsoft ha modificato il limite per le autorizzazioni totali?

Questo limite è importante per due motivi:

  • Per evitare che un'app venga configurata per richiedere più autorizzazioni di quelle che possono essere concesse durante il consenso.
  • Per mantenere le dimensioni totali della registrazione dell'app entro i limiti necessari per la stabilità e le prestazioni della piattaforma di archiviazione sottostante.

Cosa succederà se non faccio niente?

Se l'app supera il limite di autorizzazioni totali, non sarà più possibile aumentare il numero totale di autorizzazioni necessarie per l'applicazione.

Il limite modifica il numero di autorizzazioni che è possibile concedere all'applicazione?

No. Questo limite influisce solo sull'elenco delle autorizzazioni API richieste configurate nella registrazione dell'app. Questo comportamento è diverso dall'elenco di autorizzazioni concesse all'applicazione.

Anche se non è elencato nell'elenco delle autorizzazioni API necessarie, un'autorizzazione delegata può comunque essere richiesta dinamicamente da un'applicazione. È anche possibile concedere direttamente le autorizzazioni delegate e i ruoli dell'app (autorizzazioni dell'applicazione), usando l'API Microsoft Graph o Microsoft Graph PowerShell.

È possibile aumentare il limite per l'applicazione?

No, il limite non può essere elevato per singole applicazioni o organizzazioni.

Esistono altri limiti per l'elenco delle autorizzazioni API necessarie?

Sì. I limiti possono variare a seconda dei tipi di account supportati per l'app. Le app che supportano account Microsoft personali per l'accesso (ad esempio, Outlook.com, Hotmail.com, Xbox Live) hanno in genere limiti inferiori. Per altre informazioni, vedere Differenze di convalida in base ai tipi di account supportati.

Risorse aggiuntive

Usare lo script di PowerShell seguente per rimuovere eventuali autorizzazioni duplicate dalle registrazioni dell'app.

PowerShell
<#
.SYNOPSIS
    Remove duplicate required API permissions from an app registration's required API permission list.
.DESCRIPTION
    This script ensures all API permissions listed in a Microsoft identity platform's app registration are only listed once,
    removing any duplicates it finds. This script requires the Microsoft.Graph.Applications PowerShell module.
.EXAMPLE
     Get-MgApplication -Filter "appId eq '00001111-aaaa-2222-bbbb-3333cccc4444'" | .\Deduplicate_RequiredResourceAccess.ps1"
.EXAMPLE
     $apps = Get-MgApplication -Filter "startswith(displayName,'Test_app')"
     $apps | .\Deduplicate_RequiredResourceAccess.ps1
#>

#Requires -Modules Microsoft.Graph.Applications

[CmdletBinding()]
param(
    [Parameter(ValueFromPipeline = $true)]
    $App
)

begin {
    $context = Get-MgContext
    if (-not $context) {
        throw ("You must connect to Microsoft Graph PowerShell first, with sufficient permissions " +
               "to manage Application objects. For example: Connect-MgGraph -Scopes ""Application.ReadWrite.All""")
    }
}

process {
    
    # Build the unique list of required API permissions for each required API
    $originalCount = 0
    $tempRras = @{}
    foreach ($rra in $App.RequiredResourceAccess) {
        if (-not $tempRras.ContainsKey($rra.ResourceAppId)) {
            $tempRras[$rra.ResourceAppId] = @{"Scope" = @{}; "Role" = @{}};
        }
        foreach ($ra in $rra.ResourceAccess) {
            if ($tempRras[$rra.ResourceAppId][$ra.Type].ContainsKey($ra.Id)) {
                # Skip duplicate required API permission
            } else {
                $tempRras[$rra.ResourceAppId][$ra.Type][$ra.Id] = $true
            }
            $originalCount++
        }
    }
    
    # Now that we have the unique set of required API permissions, iterate over all the keys to build the final requiredResourceAccess structure
    $deduplicatedCount = 0
    $finalRras = @($tempRras.Keys) | ForEach-Object {
        $resourceAppId = $_
        @{
            "resourceAppId" = $resourceAppId
            "resourceAccess" = @(@("Scope", "Role") | ForEach-Object { 
                $type = $_
                $tempRras[$resourceAppId][$type].Keys | ForEach-Object { 
                    $deduplicatedCount++;
                    @{"type" = $type; "id" = $_}
                }
            })
        }
    }
    
    $countDifference = $originalCount - $deduplicatedCount
    if ($countDifference) {
        Write-Host "Removing $($countDifference) duplicate entries in RequiredResourceAccess for '$($App.DisplayName)' (AppId: $($App.AppId))"
        Update-MgApplication -ApplicationId $App.Id -RequiredResourceAccess $finalRras
    } else {
        Write-Host "No updates necessary for '$($App.DisplayName)' (AppId: $($App.AppId))"
    }
}

Altre informazioni