使用 azure graph API 设置 signInAudience -- 无效 JSON

Setting signInAudience using azure graph API -- Invalid JSON

我尝试使用以下代码从 powershell 内部使用 Azure Graph API(使用 azure cli / az rest 命令)设置 signInAudience:

$body='{"signInAudience":"AzureADAndMicrosoftAccounts"}'
echo $body
Test-Json -Json $body
az rest --method PATCH --uri https://graph.microsoft.com/v1.0/applications/$application_object_id --body $body --headers "Content-Type=application/json"

哪个应该(根据其余文档 here)更新 Azure AD 应用程序的 signInAudience。

这是结果:

{"signInAudience":"AzureADAndMicrosoftAccounts"}
True
ValidationError: Bad Request({
  "error": {
     "code": "BadRequest",
     "message": "Unable to read JSON request payload. Please ensure Content-Type header is set and payload is of valid JSON format.",
     "innerError": {
     "date": "2020-10-13T10:48:48",
      "request-id": "f29fd020-33aa-4cda-b98e-130d1434cd85",
      "client-request-id": "f29fd020-33aa-4cda-b98e-130d1434cd85"
     }
   }
 })

为什么这不起作用? 可以使用此 API 设置其他更改,例如以下调用确实有效。

az rest --method PATCH --uri https://graph.microsoft.com/v1.0/applications/${azuread_application.main_application.object_id} --body '{"api":{"requestedAccessTokenVersion": 2}}' --headers "Content-Type=application/json"

根据我的测试,如果我们用单引号将整个字符串括起来,Azure CLI 命令az rest 将不会识别双引号。它只是将正文标识为 {signInAudience:AzureADAndMicrosoftAccounts}。所以我建议你使用双引号将整个字符串括起来。

此外,当您希望允许拥有个人 Microsoft 帐户或任何组织的 Azure AD 租户中的工作或学校帐户的用户访问应用程序时,signInAudience 应设置为 AzureADandPersonalMicrosoftAccount.更多详情请参考here

例如

 $body="{'signInAudience':'AzureADandPersonalMicrosoftAccount'}"
  az rest --method PATCH --uri https://graph.microsoft.com/v1.0/applications/<object id> --body $body --headers "Content-Type=application/json"