gpt4 book ai didi

azure - 通过Az模块创建azure应用程序并使用powershell分配API权限

转载 作者:行者123 更新时间:2023-12-03 00:59:56 25 4
gpt4 key购买 nike

我编写了一个脚本,它使用 Az 模块创建 azure 应用程序、创建 key 、分配所有者。但分配 API 权限会出现权限不足错误。该用户是管理员用户。仍然无法分配 API 权限。我做错了什么?

$ErrorActionPreference = 'Stop'
Connect-AzAccount
Import-Module Az.Resources
$tenant = Get-AzTenant
Set-AzContext -TenantId $tenant.Id
$AppName = Read-Host -Prompt 'Enter Application name '
$myApp = New-AzADApplication -DisplayName $AppName -IdentifierUris "http://$AppName.com"
Write-Host "App registered.."
$sp = New-AzADServicePrincipal -ApplicationId $myApp.ApplicationId -Role Owner
Write-Host "Service principal registered.."
$startDate = Get-Date
$endDate = $startDate.AddYears(100)
$secret = Read-Host -Prompt 'Enter App Secret Key ' -AsSecureString
$secPassword = ConvertTo-SecureString -AsPlainText -Force -String $secret
New-AzADAppCredential -ObjectId $myApp.ObjectId -StartDate $startDate -EndDate $endDate -Password $secPassword

$ResourceAppIdURI = "https://graph.windows.net/"
# $authority = "https://login.microsoftonline.com/$tenant/oauth2/v2.0/token"
$authority = "https://login.windows.net/$tenant/oauth2/token"
$ClientCred = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential" -ArgumentList $myApp.ApplicationId, $secret
$AuthContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority,$false
$AuthContext.TokenCache.Clear()
Start-Sleep -Seconds 10
$Token = $Authcontext.AcquireTokenAsync($ResourceAppIdURI, $ClientCred)

$AuthHeader = @{"Authorization" = $Token.Result.CreateAuthorizationHeader();"Content-Type"="application/json"}
$url = "https://graph.windows.net/$tenant/applications/$($myApp.ObjectID)?api-version=1.6"
Write-Host "URL: " $url

$postData = "{`"requiredResourceAccess`":[{`"resourceAppId`":`"00000003-0000-0000-c000-000000000000`",
`"resourceAccess`":[{`"id`":`"e1fe6dd8-ba31-4d61-89e7-88639da4683d`",`"type`":`"Scope`"}]}]}";
$result = Invoke-RestMethod -Uri $url -Method "PATCH" -Headers $AuthHeader -Body $postData
Write-Host "Result of App API permission: " $result

最佳答案

就我而言,在不弄乱 http 请求的情况下执行此操作的最简单方法是将 Azure-powershell 模块和 Az cli 模块结合起来

所以,一旦我创建了我的新应用程序:

$myApp = New-AzADApplication -DisplayName $AppName -IdentifierUris "http://$AppName.com"

然后我将使用 Az Cli 登录 azure,例如:

  • 添加一些 API 权限
  • 授予这些权限目录管理员同意(如果需要)
. { $azcliLogin = az login }
. { az account set --subscription $config.subscriptionId }
. { az ad app permission add --id $myApp.appid --api 00000002-0000-0000-c000-000000000000 --api-permissions 78c8a3c8-a07e-4b9e-af1b-b5ccab50a175=Role }
. { $appApiGrant = az ad app permission grant --id $config.azureAccess.appid --api 00000002-0000-0000-c000-000000000000 }
. { az ad app permission admin-consent --id $myApp.appid }

地点:

--api 00000002-0000-0000-c000-000000000000 指 Microsoft Graph API

--api-permissions 78c8a3c8-a07e-4b9e-af1b-b5ccab50a175=Role 指此 api 上的某个角色,如 Directory.ReadWrite.All

You can get the required API and API-PERMISSIONS guids from the App manifiest in Azure enter image description here

这样,您就可以在单个 powershell 脚本中创建具有所需授予的 api 权限的应用程序。

关于azure - 通过Az模块创建azure应用程序并使用powershell分配API权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62111748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com