0

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

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

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

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

更新-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

标头:x-ms-unique-id:6 x-ms-client-request-id:cb41d352-4b67-4142-8795-9b77bf9b057a 命令名:Az.MSGraph.internal\Update-AzADApplication FullCommandName:Update-AzADApplication_UpdateExpanded ParameterSetName:__AllParameterSets User -代理:AzurePowershell/v0.0.0,Az.MSGraph/5.2.0

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

我发现文档说它应该是委派的PermissionIds,但也应该是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

它还尝试了其他方法将正文设置为不包含特殊字符,但所有内容都不断给出相同的错误。

还更新了 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"]}]}}'

错误请求({"error":{"code":"BadRequest","message":"无法读取 JSON 请求负载。请确保设置了 Content-Type 标头并且负载是有效的 JSON 格式。","innerError" :{"日期":"2022-01-31T06:23:44","re​​quest-id":"2ac51323-4f9b-4da8-8ec8-1187e4b73a59","client-request-id":"2ac51323-4f9b-4da8 -8ec8-1187e4b73a59"}}})

看起来同样的问题

4

2 回答 2

0

我们已经在我们的环境中尝试了同样的方法作为我们可以尝试的替代解决方案Graph Explorer

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

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

在此处输入图像描述

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

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

请求正文

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

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

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

  • 并通过导航到清单来检查您的权限 ID 是否正确。 输出:-在此处输入图像描述

在此处输入图像描述 在此处输入图像描述

使用az rest请参考this SO THREAD

于 2022-01-31T12:11:59.340 回答
0

这是在我的 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
于 2022-01-31T16:09:22.963 回答