Microsoft Graph API разрешение на исправление приложения - PullRequest
0 голосов
/ 07 января 2020

При использовании API https://graph.microsoft.com/.default для ПАТЧИРОВКИ приложения в Azure AD происходит сбой с ошибкой:

"code": "Authorization_RequestDenied",
"message": " Недостаточно прав для завершения операции. ", ...

Вызов аутентифицируется с помощью разрешений приложения, и настраиваются следующие параметры: Application.ReadWrite.All, Directory.ReadWrite.All.

$uri = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token";
$resourceUrl = 'https://graph.microsoft.com/.default'

$body = @{ grant_type='client_credentials';client_id=$clientId;client_secret=$clientSecret;scope=$resourceUrl; }
$result = Invoke-RestMethod -Method Post -Uri $uri -Body $body
$accessToken = $result.access_token
$authHeader = "Bearer $accessToken"

$patchBody = '{
  "displayName" : "dev2"
}'

Invoke-RestMethod -method PATCH -Uri https://graph.microsoft.com/v1.0/applications/$($app.Id) -Body $patchBody -ContentType application/json -Headers @{Authorization = $AuthHeader }

Вот разрешение API:

Application API permissions Примечание. У меня есть доступ для выполнения операции GET для Приложения.

Можно ли этого добиться?

1 Ответ

0 голосов
/ 07 января 2020

Разрешения приложения Application.ReadWrite.All достаточно, убедитесь, что вы предоставили его в Microsoft Graph, а не Azure Active Directory Graph, и не забудьте нажать кнопку Grant admin consent.

enter image description here

В вашем скрипте не следует пропускать $body в последней строке, $body используется для получения токена доступа. И убедитесь, что эта часть $($app.Id) является ObjectId приложения.

$body = @{ grant_type='client_credentials';client_id=$clientId;client_secret=$clientSecret;scope=$resourceUrl; }

Invoke-RestMethod -method PATCH -Uri https://graph.microsoft.com/v1.0/applications/$($app.Id) -Body $body -ContentType application/json -Headers @{Authorization = $AuthHeader }

Вам нужно использовать тело по этой ссылке Update application - Request body, вы можете сохранить его в файл .json, затем используйте Get-Content для его получения.

В моем примере я обновляю appRoles, вы можете сослаться на него, как показано ниже.

patch.json file:

{
 "appRoles": [
   {
    "allowedMemberTypes": [
      "User"
    ],
    "description": "Creators can create Surveys",
    "displayName": "SurveyCreator",
    "id": "1b4f816e-5eaf-48b9-8613-7923830595ad",
    "isEnabled": false,
    "value": "SurveyCreator"
  }
 ]
}

Script :

$uri = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token";
$resourceUrl = 'https://graph.microsoft.com/.default'

$body = @{ grant_type='client_credentials';client_id=$clientId;client_secret=$clientSecret;scope=$resourceUrl; }
$result = Invoke-RestMethod -Method Post -Uri $uri -Body $body
$accessToken = $result.access_token
$authHeader = "Bearer $accessToken"

$body1 = Get-Content -Path "C:\Users\joyw\Desktop\patch.json"

Invoke-RestMethod -method PATCH -Uri https://graph.microsoft.com/v1.0/applications/<Object-id> -Body $body1 -ContentType application/json -Headers @{Authorization = $AuthHeader }

После выполнения команды вы можете использовать метод GET для проверки результата.

Invoke-RestMethod -method GET -Uri https://graph.microsoft.com/v1.0/applications/<Object-id> -ContentType application/json -Headers @{Authorization = $AuthHeader }

enter image description here

Обновление:

Если вы используете это как тело, оно также будет работать.

$patchBody = '{
  "displayName" : "dev2"
}'

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...