使用 Az Powershell 7.1.0 在 Azure 应用程序注册中设置 preAuthorizedApplications 时出现问题

Problem with setting preAuthorizedApplications in Azure app registration with Az Powershell 7.1.0

我在为 Az powershell 7.1.0 的 Azure 应用程序注册自动设置 preAuthorizedApplications 时遇到问题。代码正在过渡到 MS Graph api,但我不清楚 preAuthorizedApplications 的语法。我在网上找到的所有东西,我都试过了。但是没有任何效果,并且一直出错。

我创建了一段测试代码和一个测试应用程序注册:

Get-AzADApplication -ApplicationId 956afe7b-f58f-4de5-83ea-02035cc98b3f # 只是为了获取类型

$PreAuthPrem1 = New-Object -TypeName "Microsoft.Azure.PowerShell.Cmdlets.Resources.MSGraph.Models.ApiV10.MicrosoftGraphPreAuthorizedApplication" $PreAuthPrem1.AppId = "1fec8e78-bce4-4aaf-ab1b-5451cc387264" $PreAuthPrem1.DelegatedPermissionId = "d3a943ac-ea3b-4271-b750-abcd91b01162"

Update-AzADApplication -ApplicationId 956afe7b-f58f-4de5-83ea-02035cc98b3f -api @{"preAuthorizedApplications" = $PreAuthPrem1} -debug

它一直给我同样的错误,但不是很有帮助:

线 | 549 | Az.MSGraph.internal\Update-AzADApplication @PSBoundParameters | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~ | 属性 有效负载中的 preAuthorizedApplications 具有与架构不匹配的值。

对 MS 图的请求如下(取自调试命令)

调试:============================ HTTP请求============= ===============

HTTP 方法: 补丁

绝对 URI: https://graph.microsoft.com/v1.0/applications/ccd14ce8-1afe-45b3-a461-777d3129399b

Headers: x-ms-unique-id:6 x-ms-client-request-id:cb41d352-4b67-4142-8795-9b77bf9b057a 命令名称:Az.MSGraph.internal\Update-AzADApplication 全命令名称:Update-AzADApplication_UpdateExpanded 参数集名称:__AllParameterSets User-Agent : AzurePowershell/v0.0.0,Az.MSGraph/5.2.0

Body: { “api”:{ “preAuthorizedApplications”:“{\r\n “appId”:“1fec8e78-bce4-4aaf-ab1b-5451cc387264”,\r\n “delegatedPermissionIds”:[ “d3a943ac-ea3b-4271-b750-abcd91b01162”]\r\n}" } }

我发现文档说它应该是 delegatedPermissionIds,但也应该是 permissionIds。两者都不适合我

https://docs.microsoft.com/en-us/powershell/module/az.resources/update-azadapplication?view=azps-7.1.0

https://docs.microsoft.com/en-us/graph/api/resources/preauthorizedapplication?view=graph-rest-1.0

它还尝试了其他方法来设置 body 以不包含特殊字符,但所有内容都一直出现相同的错误。

还更新了 az powershell(至 7.1.0)和 powershell 本身(7.2.1 核心)

也尝试使用 azure ClI

$appObjectId='956afe7b-f58f-4de5-83ea-02035cc98b3f'

az rest -m PATCH -u https://graph.microsoft.com/v1.0/applications/$appObjectId --headers Content-Type=application/json -b '{"api":{" preAuthorizedApplications":[{"appId":"1fec8e78-bce4-4aaf-ab1b-5451cc387264","permissionIds":["d3a943ac-ea3b-4271-b750-abcd91b01162"]}]}}'

Bad Request({"error":{"code":"BadRequest","message":"无法读取 JSON 请求负载。请确保 Content-Type header已设置且有效负载为有效 JSON 格式。","innerError":{"date":"2022-01-31T06:23:44",""request-id":"2ac51323-4f9b- 4da8-8ec8-1187e4b73a59","client-request-id":"2ac51323-4f9b-4da8-8ec8-1187e4b73a59"}}})

看起来是同样的问题

我们已经在我们的环境中尝试了相同的替代解决方案,我们可以尝试 Graph Explorer

为此,我们必须从清单中获取我们的 Oauth2Permissions id 或通过 运行 我们可以获得以下代码:

az ad app show --id $appId --query "oauth2Permissions[].id"

现在我们需要使用 Graph Explorer 来实现上述要求,通过使用以下方法在我们的请求正文中提及以下内容:

Patch : https://graph.microsoft.com/beta/applications/<appObjectId>

请求正文 :

{
    "api": {
        "preAuthorizedApplications": [
            {
                "appId": "authorizedappClientID",
                "permissionIds": [
                    "oauth2PermissionId"
                ]
            }
        ]
    }
}

在上面给定的 URI 中提供应用程序的对象 ID。

  • 允许以下同意 > 修改权限

  • 然后通过导航到清单检查您的权限 ID 是否正确。 输出:-

使用az rest请参考这个.

这是在我的 Devops 管道中运行的代码。我授予服务原则权限并允许访问令牌。

$Body = @"
{
    "api": {
        "preAuthorizedApplications": [
            {
                "appId": "1fec8e78-bce4-4aaf-ab1b-5451cc387264",
                "permissionIds": [
                    "d3a943ac-ea3b-4271-b750-abcd91b01162"
                ]
            }
        ]
    }
}
"@

$Uri = 'https://graph.microsoft.com/beta/applications/ccd14ce8-1afe-45b3-a461-777d3129399b'
$method = 'PATCH'
$Token = (Get-AzAccessToken -ResourceTypeName MSGraph).Token

$Header = @{
    Authorization = "Bearer $Token"
}
Invoke-WebRequest -Uri $Uri -Method $method -Headers $Header -ContentType 'application/json' -Body $Body