Перевести скрипт Powershell, назначающий роли приложения для сопоставления вызовам Microsoft Graph или Azure AD API - PullRequest
0 голосов
/ 12 июня 2019

Мне дали сценарий PowerShell, который запускается для выполнения групповой задачи, и мне было предложено преобразовать его в одно добавление / удаление для данного пользователя, который будет запускаться по требованию. Поскольку приложение, которое запускает процесс, использует Microsoft Graph API, и некоторые итоговые исследования показали, что PowerShell, вероятно, использует конечные точки Graph, было решено, что я должен выполнить операцию напрямую, а не пытаться удаленно вызывать скрипт.

Как я понимаю, скрипт по сути получает список участников роли приложения (по идентификатору) и группы. Если пользователь входит в группу, у него должна быть роль приложения. Если не добавить их. Если мой вышестоящий код выполняет управление группами, я должен иметь возможность управлять добавлениями и удалениями в каждом конкретном случае.

* По существу Мне нужно определить сопоставимые методы API для выполнения того же действия, что и сценарий

Я пытался получить роли приложения, используя Microsoft Graph (версии 1.0 и Beta) и Azure AD Graph. Роли каталогов и роли приложений, кажется, не одно и то же.

Beta

https://graph.microsoft.com/beta/users/[USERID]/approleassignments

График Azure AD

https://graph.windows.net/[TENANTID]/users/[USERID]/appRoleAssignments?api-version=1.6

Я получаю результаты, но ничто, похоже, не соответствует предоставленному RoleObjectID. Конечно, Microsoft Graph API v1.0 тоже не подходит.

Источник Powershell:

Connect-MsolService

$inviteRoleMembers = Get-MsolRoleMember -RoleObjectId [GUID] -All
$externalShareUsers = Get-MsolGroupMember -GroupObjectId [GUID] -All

#loading role members in array
$inviteRoleArray = @()

foreach($user in $inviteRoleMembers)
{
    $email = $user.EmailAddress
    $inviteRoleArray += $email   
}

$externalShareUsersArray = @()

foreach($user in $externalShareUsers)
{
    $displayName = $user.DisplayName
    $email = $user.EmailAddress
    $externalShareUsersArray += $email
    if($inviteRoleArray -notcontains $email)
    {
        try
        {
            Write-Host "Adding $displayName to Role" -ForegroundColor Green
            Add-MsolRoleMember -RoleObjectId [GUID] -RoleMemberEmailAddress $email
        }
        catch
        {
            Write-Host "User already in the role"
        }
    }
    else
    {
        Write-Host "$displayName already in Role" -ForegroundColor Yellow
    }
}

#remove users with role who aren't in  group
foreach ($member in $inviteRoleMembers)
{
    $displayName = $member.DisplayName
    $email = $member.EmailAddress
    if($externalShareUsersArray -contains $email)
    {
        #Write-Host "$displayName is Group" -ForegroundColor Green
    }
    else
    {
        Write-Host "$displayName is NOT in External Share Users...Removing Role Access" -ForegroundColor Magenta
        Remove-MsolRoleMember -RoleObjectId [GUID] -RoleMemberEmailAddress $email
    }
}

Мне не удалось получить какие-либо значимые результаты, соответствующие этому сценарию, потому что я не могу перевести Get-MsolRoleMember и Get-MsolGroupMember для вызовов Microsoft Graph API или Azure AD Graph. Мои результаты вызовов API бета-версии или Graph, если они правильные, не соответствуют моему конкретному идентификатору роли. Я не могу оспаривать достоверность удостоверения личности, если не уверен, что правильно извлекаю данные. Любая помощь, чтобы определить, какие вызовы мне нужно сделать, чтобы получить и обновить роли приложения, была бы очень полезна. Я никогда раньше не имел дело с ролями приложений.

Простите за форматирование. Это не простая платформа для публикации, если вы не знакомы.

Спасибо.

...