0

在 Azure AD 中,在公开 API 部分下,我希望使用 CLI 2.x 自动注册 API 和 Web 应用程序。我在这里查看了文档,但没有找到任何涉及 preAuthorizedApplications 的内容。搜索只产生了遗留支持的信息。CLI 2.x对设置 preAuthorizedApplications 数据的支持在哪里?

在此处输入图像描述

通过门户 UI 填充时,清单包含相关信息

"preAuthorizedApplications": [
{
        "appId": "d22xxxxxxx",
        "permissionIds": [
            "ef92yyyyyy"
        ]
    }
 ],...

这是可以直接插入清单的东西吗?任何参考文件或样本将不胜感激。

编辑:尝试使用空值写入属性失败,并出现错误“找到没有类型名称的值并且没有预期的类型可用....”

az ad app update --id $appId --set preAuthorizedApplications='[]'

如果我显示应用程序属性,我会在列表中看到 preAuthorizedApplications 的值为空

az ad app list --display-name $appName

在此处输入图像描述

因此,出于某种原因,似乎无法将该属性注入清单中。

4

2 回答 2

2

@joy-wang 的出色回答让我走上了正轨,但仍然需要几个小时才能做到正确。

  1. 不再使用 /beta/,使用 1.0
  2. permissionIds 现在称为 delegatedPermissionIds
  3. 现在标题的规范似乎不同了。当指定为 Joy 时,我得到 [1]
  4. 与乔伊所说的相呼应,是的,您需要非常小心引用。在意识到我需要在正文中使用双引号并在值内部使用单引号之前,我对错误的事情做了很多实验,反之则给出了错误 [2]

以下工作:

$permsJson = az ad sp show --id $apiApplicationId --query 'oauth2Permissions[].{Value:value, Id:id, UserConsentDisplayName:userConsentDisplayName}' -o json
$permsHash = $permsJson | ConvertFrom-Json
$permId = $permsHash.Id  #in my case that app only had one permission, you may need to do differently

$apiObjectId = az ad app show --id $apiApplicationId --query objectId

          az rest  `
            --method PATCH `
            --uri "https://graph.microsoft.com/v1.0/applications/$apiObjectId" `
            --headers 'Content-Type=application/json' `
            --body "{api:{preAuthorizedApplications:[{appId:'$preAuthedAppApplicationId',delegatedPermissionIds:['$permId']}]}}"

[1] 命令因意外错误而失败。这是回溯:没有足够的值来解包(预期 2,得到 1)回溯(最近一次调用最后):文件“D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\ azure/cli/core/util.py”,第 510 行,shell_safe_json_parse 文件“json_init _.py ”,第 367 行,加载文件“json\decoder.py”,第 339 行,解码文件“json\decoder. py",第 355 行,在 raw_decode json.decoder.JSONDecodeError:期望用双引号括起来的属性名称:第 1 行第 2 列(字符 1)

在处理上述异常的过程中,又出现了一个异常:

回溯(最后一次调用):文件“D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/util.py”,第 516 行,在 shell_safe_json_parse 文件中“ast.py”,第 85 行,在 literal_eval 文件中“ast.py”,第 66 行,在 _convert 文件中“ast.py”,第 65 行,在文件“ast.py”中,第 77 行,在 _convert 文件中“ast.py”。 py",第 84 行,在 _convert ValueError:格式错误的节点或字符串:<_ast.Name object at 0x04765050>

在处理上述异常的过程中,又出现了一个异常:

回溯(最后一次调用):文件“D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/util.py”,第 807 行,在 send_raw_request 文件中“D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/util.py”,第 521 行,在 shell_safe_json_parse knack.util.CLIError:期望包含的属性名称在双引号中:第 1 行第 2 列(字符 1)

在处理上述异常的过程中,又出现了一个异常:

Traceback(最近一次调用最后):文件“D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\knack/cli.py”,第 233 行,在调用文件“D:\ a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/ init .py”,第 660 行,在执行文件“D:\a\1\s\build_scripts \windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/ init .py”,第 723 行,在 _run_jobs_serially 文件“D:\a\1\s\build_scripts\windows\artifacts\cli\ Lib\site-packages\azure/cli/core/commands/ init .py”,第 716 行,在 _run_job 文件“D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\six .py”,第 703 行,在 reraise 文件“D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/ init.py”,第 694 行,在 _run_job 文件中“D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/ init .py”,第 331 行,在调用 文件“D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/ init .py”,第 811 行,在 default_command_handler 文件“D:\a\ 1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/util/custom.py”,第 17 行,在 rest_call 文件“D:\a\1\s\build_scripts\windows \artifacts\cli\Lib\site-packages\azure/cli/core/util.py", line 810, in send_raw_request ValueError: not enough values to unpack (expected 2, got 1) 要打开问题,请运行:' az反馈'

[2] Bad Request({"error":{"code":"BadRequest","message":"无法读取 JSON 请求负载。请确保 Content-Type 标头已设置且负载为有效 JSON 格式。", "innerError":{"date":"2021-06-19T12:49:52","re​​quest-id":"13fe58d2-ef15-4a57-8f95-4f30dcece5cc","client-request-id":"13fe58d2- ef15-4a57-8f95-4f30dcece5cc"}}})

于 2021-06-19T13:19:56.567 回答
0

不确定是什么原因导致的,如果你想 preAuthorizedApplications用 azure cli 设置,你可以使用直接az rest调用Microsoft Graph - Update application

样本:

az rest --method patch --uri "https://graph.microsoft.com/beta/applications/<object-id>" --headers '{"Content-Type":"application/json"}' --body '{"api":{"preAuthorizedApplications":[{"appId":"a37c1158-xxxxx94f2b","permissionIds":["5479xxxxx522869e718f0"]}]}}'

注意:你需要在bash而不是powershell中测试示例,在不同的终端中存在引用问题,如果你想在powershell中运行它,你需要改变and的格式headersbodyhttps://github .com/Azure/azure-cli/blob/dev/doc/use_cli_effectively.md#quoting-issues

我直接在Azure Cloud ShellBash中测试它,它工作正常:

在此处输入图像描述

检查门户:

在此处输入图像描述

于 2020-07-03T04:49:22.917 回答