我正在尝试从AZure CloudShell进行一些图形API调用。要进行API调用,我必须获得一个令牌。我在Azure桌面版本(PSVersion 5.1)中有100%的工作代码 但是相同的代码在运行(Core-6.2)的CloudShell中不起作用
Cloudshell库与文档存在一些不匹配的情况
我正在尝试使用此版本的AcuireTokenAsync。
我必须为此初始化PlatmforParameter 但是当我遇到错误
$ platformParameters =新对象 “ Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters” “自动”新对象:找不到“ PlatformParameters”的重载 参数计数为“ 1”。在线:1字符:23 + ...参数=新对象“ Microsoft.IdentityModel.Clients.ActiveDirecto ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~ + CategoryInfo:InvalidOperation:(:) [New-Object],MethodException + FullyQualifiedErrorId:ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
似乎PlatformParameters不接受arg构造函数
这是我在Powershell Desktop 5.1版本中的工作代码
$clientId = "1950a258-227b-4e31-a9cf-717495945fc2" # well-known client ID for AzurePowerShell
$redirectUri = "urn:ietf:wg:oauth:2.0:oob" # redirect URI for Azure PowerShell
$resourceAppIdURI = "https://graph.windows.net"
$authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority
$platformParameters = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters" -ArgumentList 'Auto'
$authResultTask = $authContext.AcquireTokenAsync($resourceAppIdURI, $clientId, $redirectUri, $platformParameters)
$authResultTask.Wait()
$authResult = $authResultTask.Result
但是相同的代码在CloudShell中不起作用
是否有从Azure云外壳获取令牌的众所周知的变体
答案 0 :(得分:1)
我想通过Powershell脚本自动化应用程序的创建和配置
如评论中所述,无需手动调用MS Graph API,您可以通过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相关的大多数事情。