Я использую API-интерфейс Graph для извлечения пользовательских изображений и элементов списка SharePoint и аутентификации с использованием идентификатора управляемой службы.
Я успешно смог добавить необходимые разрешения для идентификации своей службы с помощью powershell.
<#
ERRORS OUT BUT WORKS. YOU CAN VALIDATE BY USING THE GRAPH EXPLORER TO CALL:
https://graph.microsoft.com/beta/servicePrincipals/{msiObjectId}/appRoleAssignedTo
NOTE: Get-AzureADServiceAppRoleAssignedTo DOES NOT WORK, MUST USE GRAPH EXPLORER FOR VALIDATION
#>
Connect-AzureAD
$msiObjectId = "12345678-1234-1234-1234-123456789101"
$app_name = "Microsoft Graph"
$role_names = @("Sites.Read.All", "User.Read.All", "Directory.Read.All")
$sp = Get-AzureADServicePrincipal -Filter "displayName eq '$app_name'"
$role_names | foreach {
$role_name = $_
$appRole = $sp.AppRoles | Where-Object { ($_.DisplayName -eq $role_name) -or ($_.Value -eq $role_name) }
New-AzureADServiceAppRoleAssignment -ObjectId $msiObjectId -PrincipalId $msiObjectId -ResourceId $sp.ObjectId -Id $appRole.Id
}
Disconnect-AzureAD
Это ошибка, но добавляет разрешения и прекрасно работает, когда я публикую приложение в службе Azure, назначенной идентификатору службы.
Я использую Microsoft.Azure.Services.AppAuthentication для получения токена и выполнения вызовов.
using Microsoft.Azure.Services.AppAuthentication;
...
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", await new AzureServiceTokenProvider().GetAccessTokenAsync("00000003-0000-0000-c000-000000000000"));
...
Проблема в локальном развитии, это связано с моими полномочиями. Это успешно получает токен, который имеет некоторый базовый доступ к графу, такой как / me и / user basic, но когда я пытаюсь получить список или изображение пользователя, я получаю следующую ошибку:
{
"error": {
"code": "accessDenied",
"message": "The caller does not have permission to perform the action.",
"innerError": {
"request-id": "55555555-1234-1234-1234-123456789101",
"date": "2019-06-12T17:05:31"
}
}
}
Я пытался использовать свой собственный идентификатор объекта вместо $msiObjectId
в коде PowerShell точно так же, как он есть, а также пытался изменить New-AzureADServiceAppRoleAssignment
на New-AzureADUserAppRoleAssignment
, но ни один из них не работал. Я также попробовал все, что мог в пользовательском интерфейсе, и не нашел способа добавить разрешения, и попытался https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/authorize?client_id=00000003-0000-0000-c000-000000000000&scope=offline_access%20User.Read.All%20Sites.Read.All
, который выдает ошибку об отсутствии URL-адреса ответа, а также не работает.
Я думаю, что мне может понадобиться добавить некоторые разрешения делегатов для моей учетной записи вместо назначений ролей приложений, но я не могу найти способ сделать это. Я могу видеть разрешения, используя $sp.Oauth2Permissions
, но не могу найти способ предоставить себе эти разрешения.
Можно ли это сделать, и если да, то как?
В основном мне нужно, чтобы мои учетные данные (без приложения) имели как минимум доступ "Sites.Read.All" и "User.Read.All" к Microsoft Graph (GraphAggregatorService) при использовании new AzureServiceTokenProvider().GetAccessTokenAsync())