Невозможно добавить роли через PowerShell для регистрации приложения Azure - PullRequest
0 голосов
/ 23 января 2019

Я использую Powershell для добавления ролей в существующую регистрацию приложений в Azure.Я использую эту команду:

Set-AzureADApplication -ObjectId $myApp.ObjectId -AppRoles $newAppRoles

$newAppROles - это массив Microsoft.Open.AzureAD.Model.AppRole

Когда я выполняю вышеуказанную команду, я получаю эту ошибку:

Set-AzureADApplication: невозможно преобразовать 'System.Collections.Generic.List`1 [Microsoft.Open.AzureAD.Model.AppRole]' в тип «Microsoft.Open.AzureAD.Model.AppRole», требуемый параметром «AppRoles».Указанный метод не поддерживается.

В документации для SetAzureADApplication сказано, что для этого требуется список ролей приложения;но я получаю эту ошибку.Кажется, нет другой документации, чтобы помочь мне.Может кто-нибудь сказать мне, что я делаю не так.

Ниже приведен полный код

Connect-AzureAD
$myApp = ""
$appName = "Narasimham POC Powershell - Multiple reply URLs"
if (!($myApp = Get-AzureADApplication -Filter "DisplayName eq '$($appName)'"  -ErrorAction SilentlyContinue)) {
    Write-Output "Application $appName not found"
}
else {
    Write-Output $myApp

    $currentAppRoles = $myApp.AppRoles

    $appRole = New-Object -TypeName Microsoft.Open.AzureAD.Model.AppRole
    $appRole.IsEnabled = $true
    $appRole.DisplayName = "Read Role"
    $appRole.Value = "Reader"
    $appRole.AllowedMemberTypes = "User"
    $appRole.Id = New-Guid
    $appRole.Description = "Reader Role for Narasimham POC Powershell"

    $newAppRoles = @($currentAppRoles, $appRole)
    Write-Output $newAppRoles
    Set-AzureADApplication -ObjectId $myApp.ObjectId -AppRoles $newAppRoles
} 

1 Ответ

0 голосов
/ 23 января 2019

Я думаю, что проблема в части вашего сценария, которая добавляет новую роль к текущим ролям.

Попробуйте заменить эту часть сценария из вашего вопроса:

$newAppRoles = @($currentAppRoles, $appRole)
Write-Output $newAppRoles
Set-AzureADApplication -ObjectId $myApp.ObjectId -AppRoles $newAppRoles

начто-то вроде этого:

$currentAppRoles.Add($appRole)
Write-Output $currentAppRoles
Set-AzureADApplication -ObjectId $myApp.ObjectId -AppRoles $currentAppRoles

Вот полный сценарий, который я использовал, чтобы ответить на очень похожий вопрос SO ранее, на случай, если это будет более полезным для вас.Это добавляет новую роль приложения к существующему зарегистрированному приложению:

Connect-AzureAD -TenantId <Tenant GUID>

# Create an application role of given name and description
Function CreateAppRole([string] $Name, [string] $Description)
{
    $appRole = New-Object Microsoft.Open.AzureAD.Model.AppRole
    $appRole.AllowedMemberTypes = New-Object System.Collections.Generic.List[string]
    $appRole.AllowedMemberTypes.Add("User");
    $appRole.DisplayName = $Name
    $appRole.Id = New-Guid
    $appRole.IsEnabled = $true
    $appRole.Description = $Description
    $appRole.Value = $Name;
    return $appRole
}

# ObjectId for application from App Registrations in your AzureAD
$appObjectId = "<Your Application Object Id>"
$app = Get-AzureADApplication -ObjectId $appObjectId
$appRoles = $app.AppRoles
Write-Host "App Roles before addition of new role.."
Write-Host $appRoles

$newRole = CreateAppRole -Name "MyNewApplicationRole" -Description "This is my new Application Role"
$appRoles.Add($newRole)

Set-AzureADApplication -ObjectId $app.ObjectId -AppRoles $appRoles

Как только вы закончили с вышеуказанным сценарием для добавления AppRole, назначение ролей пользователю довольно просто и доступна прямая команда.Вот пример сценария для этого -

# Assign the values to the variables
$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...