#azure-active-directory #azure-cli #az
#azure-active-directory #azure-cli #az
Вопрос:
В нашем клиенте Azure AD есть корпоративное приложение для подготовки пользователей к другой платформе SaaS. В настоящее время он настроен только с опцией «Синхронизировать только назначенных пользователей и группы», поскольку мы не хотим переносить весь каталог.
Мой вопрос прост: есть ли способ использовать az-cli (в настоящее время установлена версия 2.0.60) для добавления пользователей в это корпоративное приложение?
Я проверил:
- az ad sp
- приложение az ad
- назначение роли az (похоже, работает только с подписками и ресурсами, приведенными ниже)
Я ожидал бы, что будет запущена простая команда назначения ролей, которая добавляет пользователя с помощью upn / ObjectId в корпоративное приложение.
Все в моей команде используют компьютеры Mac, и мы могли бы использовать Powersellcore, если у него лучшая поддержка.
Спасибо!
Комментарии:
1. Просто подтвердите: вы хотите добавить пользователя в
Users and groups
илиOwners
на скриншоте? i.stack.imgur.com/XOsx1.png2. Пользователи и группы
3. Все, кто заинтересован в этом, должны проголосовать здесь: github.com/Azure/azure-sdk-for-net/issues/8794
Ответ №1:
Если это поможет, я сделал это с помощью az rest
. Здесь все мы используем компьютеры Mac, и ядро PowerShell, похоже, в нескольких местах сломано (не поддерживает логины на основе сертификатов, а New-AzureADUserAppRoleAssignment
командлет у нас не сработал. Мы использовали предварительную версию. Документы Graph API также совершенно неверны, поэтому пришлось немного повозиться, чтобы получить правильную конечную точку и полезную нагрузку. Пример ниже:
az rest
--method post
--uri https://graph.microsoft.com/beta/users/$user/appRoleAssignments
--body "{"appRoleId": "$appRoleId", "principalId": "$user", "resourceId": "$spObjectId"}"
--headers "Content-Type=application/json"
Можете опубликовать пример сценария bash для вышеупомянутого, который устанавливает переменные, если кому-то интересно?
Комментарии:
1. Привет, @brendan-foxen — мне было бы интересно! Также интересно узнать, изменился ли ваш подход с тех пор, как вы опубликовали это. Спасибо
2. это также работает с группами, просто заменяя «users» на groups и «$user» на «$ group»
Ответ №2:
Кажется, вы не смогли бы сделать это через Azure CLI, мой обходной путь — использовать powershell для этого.
Все в моей команде используют компьютеры Mac, и мы могли бы использовать Powersellcore, если у него лучшая поддержка.
Во-первых, вам необходимо установить AzureAD.Standard.Preview
модуль powershell, который поддерживает powershell core, вы можете понять, что модуль является эквивалентом AzureAD
модуля в powershell core, они имеют одинаковое использование, это предварительная версия, более подробную информацию смотрите по этой ссылке.
Затем попробуйте выполнить команду New-AzureADUserAppRoleAssignment
, как показано ниже, в этом примере пользователь назначается приложению с идентификатором роли приложения по умолчанию.
New-AzureADUserAppRoleAssignment -ObjectId "<user objectid>" -PrincipalId "<user objectid>" -ResourceId "<service principal objectid(i.e. Enterprise Application objectid)>" -Id ([Guid]::Empty)
Регистрация на портале:
Если вы хотите назначить пользователя определенной роли приложения в приложении, попробуйте выполнить приведенную ниже команду.
$username = "<You user's UPN>"
$app_name = "<Your App's display name>"
$app_role_name = "<App role display name>"
# Get the user to assign, and the service principal for the app to assign to
$user = Get-AzureADUser -ObjectId "$username"
$sp = Get-AzureADServicePrincipal -Filter "displayName eq '$app_name'"
$appRole = $sp.AppRoles | Where-Object { $_.DisplayName -eq $app_role_name }
#Assign the user to the app role
New-AzureADUserAppRoleAssignment -ObjectId $user.ObjectId -PrincipalId $user.ObjectId -ResourceId $sp.ObjectId -Id $appRole.Id
Комментарии:
1. Большое спасибо! Кажется, работает хорошо, но, к сожалению, я не могу установить модуль на моем локальном клиенте, поскольку, похоже, это только внутренняя PSGallery, но я могу запустить этот командлет из облачной оболочки Azure. Я также не являюсь поклонником HttpBadRequest из этого вызова, если пользователь уже находится в приложении, но я могу обойти это.