如何使用 CLI 添加 preAuthorizedApplications 2.x

How to add preAuthorizedApplications using CLI 2.x

在 Azure AD 中,在公开 API 部分下,我希望使用 CLI 2.x 自动注册 API 和 Web 应用程序。我查看了文档 here,但没有找到任何解决 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

因此,由于某种原因,属性 似乎无法注入到清单中。

不确定是什么导致了这个问题,如果你想用 azure cli 设置 preAuthorizedApplications,你可以直接使用 az rest to call the 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中,你需要改变headersbody的格式,见https://github.com/Azure/azure-cli/blob/dev/doc/use_cli_effectively.md#quoting-issues

我直接在Azure Cloud ShellBash测试了,没问题:

登录门户:

@joy-wang 的出色回答让我走上了正轨,但仍然花了几个小时才弄好。

  1. 不再使用 /beta/,使用 1.0
  2. permissionIds 现在称为 delegatedPermissionIds
  3. header 的规范现在看起来风格不同了。当像 Joy 那样指定时,我得到 [1]
  4. 呼应 Joy 所说的,是的,您需要非常小心引用。在意识到我需要在 body 周围使用双引号并在值内部使用单引号之前,我对错误的事情做了很多实验,反之则给出了错误 [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\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\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”,第 84 行,在 _convert 中 ValueError:节点或字符串格式错误:<_ast.Name object at 0x04765050>

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

回溯(最近调用最后): 文件“D:\a\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/util.py”,第 807 行,在 send_raw_request 文件“D:\a\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)

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

回溯(最近调用最后): 文件“D:\a\s\build_scripts\windows\artifacts\cli\Lib\site-packages\knack/cli.py”,第 233 行,在调用中 文件“D:\a\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/init.py”,第 660 行,在执行中 文件“D:\a\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/init.py”,第 723 行,在 _run_jobs_serially 文件“D:\a\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/init.py”,第 716 行,在 _run_job 文件“D:\a\s\build_scripts\windows\artifacts\cli\Lib\site-packages\six.py”,第 703 行,重新加注 文件“D:\a\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/init.py”,第 694 行,在 _run_job 文件“D:\a\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/init.py”,第 331 行,在 call 中 文件“D:\a\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/init.py”,第 811 行,在 default_command_handler 文件“D:\a\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/util/custom.py”,第 17 行,在 rest_call 中 文件“D:\a\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/util.py”,第 810 行,在 send_raw_request 中 ValueError:没有足够的值来解压(预期 2,得到 1) 要打开一个问题,请 运行: 'az feedback'

[2] Bad Request({"error":{"code":"BadRequest","message":"Unable to read JSON request payload. 请确保设置了 Content-Type header 并且 payload 是有效 JSON 格式。","innerError":{"date":"2021-06-19T12:49:52","request-id":"13fe58d2-ef15-4a57-8f95-4f30dcece5cc ","client-request-id":"13fe58d2-ef15-4a57-8f95-4f30dcece5cc"}}})