Как создать область действия с помощью Azure CLI (приложение az ad)

Используя Azure CLI 2.x, я не могу найти способ добавить область в раздел предоставления API на портале Azure AD.

введите описание изображения здесь

Что я действительно вижу, так это то, что если я передаю --identifier-uris при создании приложения, автоматически устанавливаются URI идентификатора приложения и область действия:

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

введите описание изображения здесь

Не то, что я ожидал и не то, что хочу

Итак, я удалил --identifier-urls из команды create и вручную добавил желаемую область. затем я вижу через манифест то, что ищу в OAuth2Permissions, как показано ниже. Могу ли я поместить это в manifest.json с новым идентификатором и как-нибудь вставить?

введите описание изображения здесь

Какая команда CLI поддерживает явную поддержку определения области действия? Затем при добавлении клиентского приложения мне нужно будет выбрать определенную область действия, как на нее ссылаются?

Документация очень скудная, ИМО. Эта ссылка очень полезна, но здесь ничего не говорится о добавлении областей и клиентов. https://docs.microsoft.com/en-us/cli/azure/ad?view=azure-cli-latest. Любая помощь в отношении образцов или документации очень ценится.


person user2503078    schedule 30.06.2020    source источник


Ответы (2)


Из этой статьи Azure CLI: создание приложения Azure AD для API, предоставляющего разрешения OAuth2

Вы можете использовать команду az ad app update (см. документацию)

Затем вы можете установить свойство приложения с помощью необязательного параметра –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 [email protected]
    
person Thomas    schedule 30.06.2020
comment
Привет, это выглядит многообещающе. Однако эта строка $ DEFAULT_SCOPE = $ (az ad app show --id $ appId | jq '.oauth2Permissions [0] .isEnabled = false' | jq -r '.oauth2Permissions') не работает с jq: термин 'jq' является не распознается как имя командлета, функции, файла сценария или .... Я посмотрю, есть ли другой способ. - person user2503078; 01.07.2020
comment
Вы работаете в Windows или Linux? jq - это пакет запросов json для bash / shell stedolan.github.io/jq - person Thomas; 01.07.2020
comment
Работает на окнах. Я ищу эквивалент - person user2503078; 01.07.2020
comment
если вы используете PowerShell ConvertTo-Json и ConvertFrom-Json, он должен помочь? - person Thomas; 01.07.2020
comment
Если я знаю, что изменить, могу ли я просто установить IsEnabled в значение false в OAuthPermissions, а затем передать этот JSON (весь объект) обратно в набор? Я могу изолировать блок JSON с помощью этой команды: az ad app list --display-name $ appName --query [] .oauth2Permissions [0] - person user2503078; 01.07.2020
comment
да, это отключить область действия по умолчанию перед созданием новой - person Thomas; 01.07.2020
comment
Привет, вы можете застрелить меня, как выглядит DEFAULT_SCOPE из исходного кода? Я предположил, что это либо все приложение, либо блок oauth2permissions, но ничего не работает. Я получаю такие ошибки десериализации. Невозможно построить модель: Невозможно десериализовать как [OAuth2Permission] объект типа ‹class 'str'›, DeserializationError: Невозможно десериализовать как [OAuth2Permission] объект типа ‹class 'str'›. Посмотрел в документации, но это никому не говорит. Вы успешно запустили этот код? - person user2503078; 01.07.2020

С помощью из темы выше и тонны проб и ошибок плюс довольно полезная ссылка, мне удалось разработать сценарий CLI для добавления области с использованием среды Windows. PowerShell не устраивает 'jq' в окнах, и для того, чтобы все работало, пришлось удалить обратную галочку. Теперь мне нужно решить добавление 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 [email protected]

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 [email protected]

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