AcquireTokenAsyn在Azure云shell中

AcquireTokenAsyn在Azure云shell中,azure,powershell,azure-cloud-shell,Azure,Powershell,Azure Cloud Shell,我正在尝试从AZure CloudShell进行一些图形API调用。要进行API调用,我必须获取一个令牌。我在Azure桌面版(PS5.1版)中有100%的工作代码 但同样的代码在CloudShell中不起作用,CloudShell使用(Core-6.2)运行s Cloudshell库与文档有一些不匹配之处 我正在尝试使用这个版本的 为此,我必须初始化PlatmforParameter 但是当我出错的时候 $platformParameters=新对象 “Microsoft.IdentityMo

我正在尝试从AZure CloudShell进行一些图形API调用。要进行API调用,我必须获取一个令牌。我在Azure桌面版(PS5.1版)中有100%的工作代码 但同样的代码在CloudShell中不起作用,CloudShell使用(Core-6.2)运行s

Cloudshell库与文档有一些不匹配之处

我正在尝试使用这个版本的

为此,我必须初始化PlatmforParameter 但是当我出错的时候

$platformParameters=新对象 “Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters” “自动”新对象:找不到“平台参数”的重载 参数计数为:“1”。第1行字符:23 + ... 参数=新对象“Microsoft.IdentityModel.Clients.ActiveDirecto…”。。。 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:InvalidOperation:(:)[New Object],MethodException +FullyQualifiedErrorId:ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

似乎平台参数不接受参数构造函数

这是我在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 Cloud shell获取代币有什么众所周知的变化吗


我想通过powershell脚本自动化应用程序的创建和配置

如评论中所述,无需手动调用MS Graph API,您可以通过powershell模块实现自动化,该模块也可在cloud shell中获得

样本:

1.创建应用程序-

2.更新申请书—

例如,设置应用程序的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)
$req=New Object-TypeName“Microsoft.Open.AzureAD.Model.RequiredResourceAccess”
$acc1=新对象-类型名称“Microsoft.Open.AzureAD.Model.ResourceAccess”-参数列表“311a71cc-e848-46a1-bdf8-97ff7156d8e6”,“范围”
$acc2=新对象-类型名称“Microsoft.Open.AzureAD.Model.ResourceAccess”-参数列表“aaff0dfd-0295-48b6-a5cc-9f465bc87928”,“角色”
$req.ResourceAccess=$acc1,$acc2
$req.ResourceAppId=“00000002-0000-0000-c000-000000000000”
$REQUE=新对象-类型名称“Microsoft.Open.AzureAD.Model.RequiredResourceAccess”
$acc1e=新对象-类型名“Microsoft.Open.AzureAD.Model.ResourceAccess”-参数列表“ddb3ca45-a192-477d-acb2-46bf9dc586de”,“范围”
$acc2e=新对象-类型名“Microsoft.Open.AzureAD.Model.ResourceAccess”-参数列表“28379fa9-8596-4fd9-869e-cb60a93b5d84”,“角色”
$REQUE.ResourceAccess=$acc1e,$acc2e
$reqe.ResourceAppId=“0000000 9-0000-0000-c000-000000000000”
设置AzureADApplication-ObjectId-RequiredResourceAccess@($req,$reqe)
我在local和cloud shell中测试了这个脚本,两者都很好。如果您有其他需求,只需查看,您可以通过这个模块完成与AAD相关的大部分工作


有关此示例的更多详细信息,请参阅两个链接和。

我可以知道您要调用哪些图形API吗?以及为什么要在cloud shell中调用它们吗?我正在尝试调用我可以使用New AzureRmADApplication cmdlet创建应用程序,但需要配置创建的应用程序(例如:分配API权限、角色等)不需要这样做,在
AzureAD
模块中有一个bulit in命令。但我想知道为什么您要在云shell中这样做?我想通过powershell自动化应用程序的创建和配置script@JoyWang对我解释的关于构造函数不匹配的问题有什么想法吗(例如:Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters)谢谢@JoyWang,我将验证代码并更新注释部分
$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)