如何使用 Azure CLI (az ad app) 创建范围

How to create scope using Azure CLI (az ad app)

使用 Azure CLI 2.x,我找不到在 Azure AD 门户中公开 API 部分下“添加范围”的方法。

我看到的是,如果我在创建应用程序时传递 --identifier-uris,应用程序 ID URI 和范围会自动设置:

    `az ad app create --display-name "$appName" --identifier-uris "https://$tenantDomain/$appName" --reply-urls "$replyUrl" --oauth2-allow-implicit-flow true`

不是我所期望的,也不是我想要的

因此,我从创建命令中删除了 --identifier-urls 并手动添加了我想要的范围。然后我通过清单看到我在 OAuth2Permissions 下寻找的内容,如下所示。我可以用新的 guid 将其放入 manifest.json 并以某种方式插入吗?

什么CLI命令支持显式支持定义一个Scope? 然后添加一个客户端应用程序,我需要 select 定义的范围,这是如何引用的?

文档非常稀疏,IMO。这个参考非常有用,但这里没有任何内容谈论添加范围和客户端。 https://docs.microsoft.com/en-us/cli/azure/ad?view=azure-cli-latest。非常感谢对示例或文档的任何帮助。

来自这篇文章Azure CLI: Create an Azure AD application for an API that exposes OAuth2 Permissions

您可以使用az ad app update命令(see documentation)

然后您可以使用可选参数 –set

设置应用程序的 属性
  1. 创建一个包含权限的oauth2-permissions.json

    [
      {
        "adminConsentDescription": "Access CP Debug Desc",
        "adminConsentDisplayName": "Access CP Debug",
        "id": "85b8f1a0-0733-47dd-9af4-cb7221dbcb73",
        "isEnabled": true,
        "type": "Admin",
        "userConsentDescription": null,
        "userConsentDisplayName": null,
        "value": "Access"
      }
    ]
    
  2. 运行 这个脚本,它将创建应用程序,禁用现有范围并添加新范围:

    # Create the app registration
    APP_REG=$(az ad app create --display-name myapi --identifier-uris https://myapi)
    
    # Get the app id
    APP_ID=$(echo $APP_REG | jq -r '.appId')
    
    # disable default exposed scope
    DEFAULT_SCOPE=$(az ad app show --id $APP_ID | jq '.oauth2Permissions[0].isEnabled = false' | jq -r '.oauth2Permissions')
    az ad app update --id $APP_ID --set oauth2Permissions="$DEFAULT_SCOPE"
    
    # Create new scopes from file 'oath2-permissions'
    az ad app update --id $APP_ID --set oauth2Permissions=@oauth2-permissions.json
    

在上述线程的帮助下,以及大量试错和 pretty useful link,我能够使用 windows 环境编写 CLI 脚本来添加范围。 PowerShell 对 windows 上的 'jq' 不满意,必须删除反引号的使用才能使事情正常进行。现在我需要解决使用 CLI 添加 preAuthorizedApplication 的问题。

$userAccessScopeApi = '{
    "lang": null,
    "origin": "Application",        
    "adminConsentDescription": "Access CP Debug desc",
    "adminConsentDisplayName": "Access CP Debug",
    "id": "--- replaced in scripts ---",
    "isEnabled": true,
    "type": "Admin",
    "userConsentDescription": null,
    "userConsentDisplayName": null,
    "value": "Access"
}' | ConvertTo-Json | ConvertFrom-Json
`

Write-Host " -  1 read oauth2permissions"
#(az ad app show  --id $appid)
$appjson = (az ad app list --display-name $appName)         
$app = $appjson | ConvertFrom-Json
$oauth2Permissions = $app.oauth2Permissions
$oauth2Permissions[0].isEnabled = 'false'

$oauth2Permissionsjson = ConvertTo-Json -InputObject @($oauth2Permissions) 

Write-Host " -  2 disable oauth2Permission in Azure App Registration"
$oauth2Permissionsjson | Out-File -FilePath .\oauth2Permissionsold.json
az ad app update --id $appId --set oauth2Permissions=@oauth2Permissionsold.json

Write-Host " -  3 delete the default oauth2Permission"
az ad app update --id $appId --set oauth2Permissions='[]'

Write-Host " -  4 add the new scope required add the new oauth2Permissions values"
$oauth2PermissionsApiNew = $userAccessScopeApi | ConvertFrom-Json
$oauth2PermissionsApiNew[0].id = New-Guid
$oauth2PermissionsApiNew = ConvertTo-Json -InputObject @($oauth2PermissionsApiNew) 

# Write-Host "new oauth2permissions : " + $oauth2PermissionsApiNew" 
$oauth2PermissionsApiNew | Out-File -FilePath .\oauth2Permissionsnew.json
az ad app update --id $appId --set oauth2Permissions=@oauth2Permissionsnew.json

Write-Host " - Updated scopes (oauth2Permissions) for App Registration: $appId"`