Проблема, с которой вы, вероятно, сталкиваетесь, заключается в том, что, несмотря на то, что регистрация вашего приложения именуется тем же, что и ваше приложение с поддержкой MSI, эти два в конечном итоге представляют разные субъекты службы в AAD. Использование регистрации приложений в MSI в настоящее время не поддерживается.
Попробуйте выполнить команды powershell, используя вместо этого идентификатор объекта идентификатора MSI.Я смог заставить это работать, и предоставил моему приложению с поддержкой MSI доступ к Graph Api.
Вот PS, который я использовал для назначения ролей GraphApi, необходимых для моего функционального приложения:
$functionAppName = "My-FANCY-FUNC"
$context = Get-AzureRmContext -ErrorAction SilentlyContinue #this lets you search AAD for func
if(!$context){
$login = Connect-AzureRmAccount | Out-Null
Connect-AzureAD #needed this for Graph API
$context = $login
} else { Write-Host "Login session already established for " $context.Subscription.SubscriptionName }
#get the SP associated with the MSI
$MSIPrincipal = Get-AzureRmADServicePrincipal -SearchString $functionAppName | Where-Object DisplayName -eq $functionAppName
#get the SP associatesd with the MS Graph
$graph = Get-AzureADServicePrincipal -All $true | ? { $_.DisplayName -match "Microsoft Graph" }
#find the target app roles in the graph
$targetRoles = $graph.AppRoles | Where-Object Value -in "Group.ReadWrite.All", "Directory.ReadWrite.All"
#iterate throgh the known roles and add the MSI SP to them
$targetRoles | ForEach-Object {New-AzureADServiceAppRoleAssignment -Id $_.Id -PrincipalId $MSIPrincipal.Id -ObjectId $MSIPrincipal.Id -ResourceId $graph.ObjectId}
Я подозреваю, что, основываясь на вашем вопросе, эта строка вернет более чем одну сущность:
Get-AzureRmADServicePrincipal -SearchString $functionAppName | Where-Object DisplayName -eq $functionAppName
Удаление регистрации посторонних приложений должно очистить