Как получить значение роли приложения с учетом идентификатора роли приложения в Entra ID с помощью Microsoft Graph Powershell?

После получения назначений ролей приложения субъекту-службе:

Get-MgServicePrincipalAppRoleAssignment -ServicePrincipalId ServicePrincipalId

Я хочу получить значение для каждой роли приложения. Ответ включает идентификатор роли приложения и идентификатор ресурса для каждой назначенной роли приложения.

Я могу получить роли приложения для приложения следующим образом, но тогда мне сначала нужно будет сопоставить идентификатор объекта субъекта-службы (идентификатор ресурса) с идентификатором объекта связанного приложения:

(Get-MgApplication -ApplicationId ApplicationId).AppRoles

Есть ли более простой способ?

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы получить значение роли приложения с учетом идентификатора роли приложения в Entra ID с помощью Microsoft Graph PowerShell, используйте приведенный ниже скрипт:

Я предоставил приложению Microsoft Entra ID несколько разрешений API приложения:

$ServicePrincipalId = "ServicePrincipalObjectID"

$AppRoleAssignments = Get-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $ServicePrincipalId

$AssignedRoles = @()
foreach ($Assignment in $AppRoleAssignments) {
    $ResourceId = $Assignment.ResourceId
    $AppRoleId = $Assignment.AppRoleId

    $ServicePrincipal = Get-MgServicePrincipal -ServicePrincipalId $ResourceId

    $AppRole = $ServicePrincipal.AppRoles | Where-Object { $_.Id -eq $AppRoleId }

    if ($AppRole) {
        $AssignedRoles += [PSCustomObject]@{
            'App Role ID'                    = $AppRole.Id
            'App Role Display Name'          = $AppRole.DisplayName
            'App Role Value'                 = $AppRole.Value
        }
    }
}

$AssignedRoles | Format-Table -AutoSize

Спасибо! Почему роли приложения находятся как в приложении, так и в связанном с ним субъекте-службе? На портале роли приложения настраиваются для приложения, а не для субъекта-службы (здесь вы назначаете пользователей/группы ролям приложения).

Shuzheng 27.08.2024 13:52

Когда вы предоставляете согласие администратора на роли приложения, это также будет отражено в разрешениях субъекта-службы.

Rukmini 27.08.2024 13:53

@Shuzheng Сработал ли у вас приведенный выше сценарий?

Rukmini 27.08.2024 13:56

Да, добавленные роли приложения будут отражены в колонке разрешений субъекта-службы. Но роли приложения не определены в субъекте-службе, они определены в приложении в колонке ролей приложения.

Shuzheng 27.08.2024 14:16

Да, я согласен, и вы не можете определять роли в субъекте-службе. Субъект-служба находится в экземпляре приложения, и, следовательно, разрешения также будут отражены в колонке разрешений субъекта-службы.

Rukmini 27.08.2024 14:18

Субъекты-службы не определяют свои собственные роли, а вместо этого отражают роли, определенные приложением, с которым они связаны. Роли приложения определяются в приложении, а затем эти роли становятся доступными через субъект-службу в клиенте, где используется приложение.

Rukmini 27.08.2024 14:20

Спасибо. Это неправда: эти роли отражены в разрешениях субъекта-службы. Приложение может определить 100 ролей приложения, но в разрешениях субъекта-службы отображаются только роли приложения, назначенные ему.

Shuzheng 27.08.2024 15:21

Хаха, да. Я хочу перечислить все определения расширений каталогов в клиенте, используя Get-MgDirectoryObjectAvailableExtension. Однако он возвращает лишь некоторые из них (не те, которые созданы в приложениях моего клиента). Чтение этих атрибутов расширения каталога непосредственно из приложения с помощью Get-MgApplicationExtensionProperty -ApplicationId ApplicationId дает атрибуты расширения, которые не возвращаются Get-MgDirectoryObjectAvailableExtension. У вас есть идеи?

Shuzheng 27.08.2024 16:05

Пожалуйста, задайте новый вопрос с подробностями, я помогу вам там и вставьте ссылку сюда.

Rukmini 27.08.2024 16:07
stackoverflow.com/questions/78919334/…
Shuzheng 27.08.2024 16:18

Я опубликовал новый вопрос. Спасибо за помощь @Rukmini

Shuzheng 27.08.2024 16:18

Конечно проверю и обновлю

Rukmini 27.08.2024 16:19

Другие вопросы по теме

Как получить список конвейеров в фабрике данных Azure для определенной ветки?
Доступ к параметрам приложения логики в коде сценария PowerShell в стандартных рабочих процессах
Использование API NDepend из сценария Windows PowerShell 5.1 приводит к ошибке регистра букв CLS
Перемещение изображений в подпапках в зависимости от ориентации
Как запросить разрешения OAuth2 для субъектов службы в Entra ID с помощью Microsoft Graph Powershell?
Невозможно обновить переменные в сценарии PowerShell файла yml Azure Devops
Отсутствует терминатор в PowerShell CLI в цикле for с использованием расширенных переменных
Как получить доступ к защищенной переменной в свойстве условия задачи Powershell в конвейере Azure
Powershell, как отображать только имена каталогов (кроме одного) и подкаталогов?
Переименуйте файлы последовательно, и если файл уже существует (конфликт имен), просто увеличьте итератор, чтобы дать файлу новое имя