Olvasás angol nyelven

Megosztás a következőn keresztül:


A konfigurált engedélyek korlátainak hibaelhárítása

Az RequiredResourceAccess alkalmazásobjektumon található gyűjtemény (RRA) tartalmazza az alkalmazás alapértelmezett hozzájárulási kéréséhez szükséges összes konfigurált API-engedélyt. Ez a gyűjtemény különböző korlátozásokkal rendelkezik attól függően, hogy az alkalmazás milyen identitástípusokat támogat. A támogatott fióktípusok korlátairól további információt a támogatott fióktípusok szerinti érvényesítési különbségek című témakörben talál.

A maximális engedélyekre vonatkozó korlátok 2022 májusában frissültek, így egyes alkalmazások több engedélyekkel rendelkezhetnek az RRA-ban, mint amennyit most engedélyeztek. Emellett azok az alkalmazások, amelyek az engedélyek konfigurálása után módosítják a támogatott fióktípusaikat, túlléphetik az új beállítás korlátait. Ha az alkalmazások túllépik a konfigurált engedélykorlátot, nem lehet új engedélyeket hozzáadni, amíg a gyűjtemény engedélyeinek RequiredResourceAccess száma vissza nem kerül a korlátok alá.

Ez a dokumentum további információkat és hibaelhárítási lépéseket tartalmaz a probléma megoldásához.

Annak azonosítása, hogy egy alkalmazás túllépte-e a RequiredResourceAccess korlátokat

Általánosságban elmondható, hogy a 400-nál több engedélyekkel rendelkező alkalmazások mindegyike túllépte a konfigurációs korlátokat. Az alkalmazásokra alacsonyabb korlátozások is vonatkozhatnak, ha támogatják a személyes Microsoft-fiókok (MSA) bejelentkezését. Az engedélykorlátokat túllépő alkalmazások a következő hibaüzenetet kapják, amikor további engedélyeket próbálnak hozzáadni az Azure Portalon:

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

Megoldási lépések

Ha az alkalmazásra már nincs szükség, az első lehetőség az alkalmazásregisztráció teljes törlése. (Visszaállíthatja a nemrég törölt alkalmazásokat, ha nem sokkal később kiderül, hogy még szükség van rá.)

Ha továbbra is szüksége van az alkalmazásra, vagy nem biztos benne, az alábbi lépések segítenek a probléma megoldásában:

  1. Távolítsa el az ismétlődő engedélyeket. Bizonyos esetekben ugyanaz az engedély többször is megjelenik a listában. Tekintse át a szükséges engedélyeket, és távolítsa el a két vagy több alkalommal felsorolt engedélyeket. Tekintse meg a kapcsolódó PowerShell-szkriptet a cikk további források szakaszában.
  2. Távolítsa el a nem használt engedélyeket. Tekintse át az alkalmazás által igényelt engedélyeket, és hasonlítsa össze azokat az alkalmazás vagy szolgáltatás által használt engedélyekkel. Távolítsa el az alkalmazásregisztrációban konfigurált, de az alkalmazáshoz vagy szolgáltatáshoz nem szükséges engedélyeket. Az engedélyek áttekintéséről további információt az alkalmazásengedélyek áttekintése című témakörben talál .
  3. Redundáns engedélyek eltávolítása. Számos API-ban, például a Microsoft Graphban, bizonyos engedélyekre nincs szükség, ha más kiemelt engedélyeket is tartalmaznak. Például a User.Read.All (minden felhasználó olvasása) Microsoft Graph-engedélyre nincs szükség, ha egy alkalmazáshoz a User.ReadWrite.All (olvasás, létrehozás és frissítés) is tartozik. A Microsoft Graph-engedélyekkel kapcsolatos további információkért tekintse meg a Microsoft Graph engedélyeinek hivatkozását.

Gyakori kérdések (GYIK)

Miért módosította a Microsoft a teljes engedélyekre vonatkozó korlátot?

Ez a korlát két okból fontos:

  • Annak megakadályozása, hogy egy alkalmazás úgy legyen konfigurálva, hogy több engedélyre legyen szükség, mint amennyit a hozzájárulás során meg lehet adni.
  • Az alkalmazásregisztráció teljes méretének megtartása a mögöttes tárolási platform stabilitásához és teljesítményéhez szükséges korlátokon belül.

Mi történik, ha nem csinálok semmit?

Ha az alkalmazás túllépi a teljes engedélykorlátot, többé nem fogja tudni növelni az alkalmazáshoz szükséges engedélyek teljes számát.

Módosítja a korlát, hogy hány engedélyt adhat meg az alkalmazásom?

Szám Ez a korlát csak az alkalmazásregisztrációhoz konfigurált kért API-engedélyek listáját érinti. Ez eltér az alkalmazáshoz kapott engedélyek listájától.

Még ha nem is szerepel a szükséges API-engedélyek listájában, az alkalmazás továbbra is dinamikusan kérheti a delegált engedélyeket. A delegált engedélyek és az alkalmazásszerepkörök (alkalmazásengedélyek) közvetlenül is megadhatók a Microsoft Graph API vagy a Microsoft Graph PowerShell használatával.

Megemelhető a korlát az alkalmazásomra vonatkozóan?

Nem, a korlát nem emelhető egyéni alkalmazásokra vagy szervezetekre.

Vannak más korlátozások a szükséges API-engedélyek listájában?

Igen. A korlátok az alkalmazás támogatott fióktípusaitól függően változhatnak. A személyes Microsoft-fiókokat (például Outlook.com, Hotmail.com, Xbox Live) támogató alkalmazások általában alacsonyabb korlátozásokkal rendelkeznek. További információ: Érvényesítési különbségek támogatott fióktípusok szerint.

További erőforrások

Az alábbi PowerShell-szkripttel eltávolíthatja az ismétlődő engedélyeket az alkalmazásregisztrációkból.

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))"
    }
}

További információ