AcquireTokenAsyn в облачной оболочке Azure - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь сделать несколько вызовов API графа из AZure CloudShell.Для вызова API я должен получить токен.У меня 100% рабочий код в версии Azure Desktop (PSVersion 5.1), но тот же код не работает в CloudShell, который работает с (Core - 6.2)

Библиотеки Cloudshell имеют несколько несоответствий с документами

Я пытаюсь использовать эту версию AcuireTokenAsync .

, для которой мне нужно установить PlatmforParameter, но когда я получаю ошибку

$ platformParameters = New-Объект "Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters" "Авто" Новый объект: не удается найти перегрузку для "PlatformParameters" и счетчика аргументов: "1".В строке: 1 символ: 23 + ... arameters = New-Object "Microsoft.IdentityModel.Clients.ActiveDirecto ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [New-Object], MethodException+ FullyQualifiedErrorId: ConstructorInvokedThrowException, Microsoft.PowerShell.Commands.NewObjectCommand

Кажется, PlatformParameters не принимает конструктор arg

Это мой рабочий код в Powershell Desktop 5.1 версии * 101 * * * *

Но тот же код не работает в CloudShell

Существует ли какой-либо известный вариант получения токена из оболочки Azure Cloud

1 Ответ

1 голос
/ 03 июля 2019

Я хотел автоматизировать создание и настройку приложения с помощью скрипта powershell

Как уже упоминалось в комментарии, нет необходимости вызывать API-интерфейсы MS Graph вручную, вы можете автоматизировать их с помощью AzureAD модуль powershell, который также доступен в облачной оболочке.

Образцы:

1. Создание приложения -New-AzureADApplication

New-AzureADApplication -DisplayName "My new application"  -IdentifierUris "http://mynewapp.contoso.com"

2. Обновление приложения - Set-AzureADApplication

Например, установитеРазрешения API для приложения.

$req = New-Object -TypeName "Microsoft.Open.AzureAD.Model.RequiredResourceAccess"
$acc1 = New-Object -TypeName "Microsoft.Open.AzureAD.Model.ResourceAccess" -ArgumentList "311a71cc-e848-46a1-bdf8-97ff7156d8e6","Scope"
$acc2 = New-Object -TypeName "Microsoft.Open.AzureAD.Model.ResourceAccess" -ArgumentList "aaff0dfd-0295-48b6-a5cc-9f465bc87928","Role"
$req.ResourceAccess = $acc1,$acc2
$req.ResourceAppId = "00000002-0000-0000-c000-000000000000"

$reqe = New-Object -TypeName "Microsoft.Open.AzureAD.Model.RequiredResourceAccess"
$acc1e = New-Object -TypeName "Microsoft.Open.AzureAD.Model.ResourceAccess" -ArgumentList "ddb3ca45-a192-477d-acb2-46bf9dc586de","Scope"
$acc2e = New-Object -TypeName "Microsoft.Open.AzureAD.Model.ResourceAccess" -ArgumentList "28379fa9-8596-4fd9-869e-cb60a93b5d84","Role"
$reqe.ResourceAccess = $acc1e,$acc2e
$reqe.ResourceAppId = "00000009-0000-0000-c000-000000000000"

Set-AzureADApplication -ObjectId <ObjectId> -RequiredResourceAccess @($req,$reqe)

Я тестирую скрипт в локальной и облачной оболочке, оба работают нормально.Если у вас есть другие требования, просто загляните в Azure AD PowerShell doc , вы можете делать большинство вещей, связанных с AAD, через этот модуль.

Для получения дополнительной информации о примере, вы можете обратиться кдве ссылки, 1 и 2 .

...