Подтвердить что ты не робот

Как программно добавить приложение в Azure AD?

Я хочу автоматизировать создание моего приложения в Azure AD и вернуть идентификатор клиента, созданный Azure AD.

Есть ли для этого командлеты PowerShell? Существуют ли другие средства, например API, помимо консоли управления?

Можете ли вы указать мне пример?

Спасибо!

4b9b3361

Ответ 1

Существует несколько способов создания приложения в AAD программно. Я кратко рассмотрю два разных способа, которыми вы можете это заняться: PowerShell CMDLET и Graph API. В общем, я бы настоятельно рекомендовал использовать Graph API для этого.

PowerShell:

Существует несколько различных модулей, которые имеют возможность создавать AAD Applications/Service Principals. Если вам нужно создать новый объект приложения в своем арендаторе, вы можете использовать Azure PowerShell, чтобы сделать следующий вызов:

https://msdn.microsoft.com/en-us/library/mt603747.aspx

PS C:\> New-AzureRmADApplication -DisplayName "NewApplication" -HomePage "http://www.Contoso.com" -IdentifierUris "http://NewApplication"

Если вам нужно создать принципала для вашего приложения в своем арендаторе, вы можете использовать Azure AD PowerShell:

https://msdn.microsoft.com/en-us/library/azure/jj151815.aspx

https://msdn.microsoft.com/en-us/library/azure/dn194119.aspx

New-MsolServicePrincipal -ServicePrincipalNames @("MyApp/Contoso.com") -DisplayName "My Application"

Graph API: (Рекомендуется)

Вы также можете создавать приложения, создавая POST для нашего графического API: https://msdn.microsoft.com/Library/Azure/Ad/Graph/api/entity-and-complex-type-reference#ApplicationEntity

У нас есть образцы, которые показывают, как вы можете зарегистрировать и создать заявку для таргетинга на Graph API и использовать библиотеку клиентов Graph, чтобы помочь вам в правильных вызовах API:

https://github.com/AzureADSamples/WebApp-GraphAPI-DotNet

Надеюсь, это поможет!

Ответ 2

Я немного опаздываю на вечеринку, но недавно я столкнулся с этой проблемой. Вот соответствующие выдержки из моего решения...

Сначала вам нужно получить токен аутентификации. Для этого вы можете использовать эту удобную функцию.

function GetAuthToken
{
       param
       (
              [Parameter(Mandatory=$true)]
              $TenantName
       )

       $adal = "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\PowerShell\ServiceManagement\Azure\Services\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"

       $adalforms = "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\PowerShell\ServiceManagement\Azure\Services\Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll"

       [System.Reflection.Assembly]::LoadFrom($adal) | Out-Null

       [System.Reflection.Assembly]::LoadFrom($adalforms) | Out-Null

       $clientId = "1950a258-227b-4e31-a9cf-717495945fc2" 

       $redirectUri = "urn:ietf:wg:oauth:2.0:oob"

       $resourceAppIdURI = "https://graph.windows.net"

       $authority = "https://login.windows.net/$TenantName"

       $authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority

       $authResult = $authContext.AcquireToken($resourceAppIdURI, $clientId,$redirectUri, "Auto")

       return $authResult
}

(заимствован из Paulo Marques https://blogs.technet.microsoft.com/paulomarques/2016/03/21/working-with-azure-active-directory-graph-api-from-powershell/)

Затем вы можете отправить запрос POST в Azure Active Directory Graph API для создания вашего приложения. Однако требуется небольшая настройка.

# The name of this AAD instance
$global:tenant = "mycompany.onmicorosft.com"
$global:aadSecretGuid = New-Guid
$global:aadDisplayName = "azure-ad-displayname"
$global:aadIdentifierUris = @("https://contoso.com")
$guidBytes = [System.Text.Encoding]::UTF8.GetBytes($global:aadSecretGuid)

$global:aadSecret = @{
    'type'='Symmetric';
    'usage'='Verify';
    'endDate'=[DateTime]::UtcNow.AddDays(365).ToString('u').Replace(' ', 'T');
    'keyId'=$global:aadSecretGuid;
    'startDate'=[DateTime]::UtcNow.AddDays(-1).ToString('u').Replace(' ', 'T');  
    'value'=[System.Convert]::ToBase64String($guidBytes);
}

# ADAL JSON token - necessary for making requests to Graph API
$global:token = GetAuthToken -TenantName $global:tenant
# REST API header with auth token
$global:authHeader = @{
    'Content-Type'='application/json';
    'Authorization'=$global:token.CreateAuthorizationHeader()
}

Теперь вы можете попасть в Graph API.

$resource = "applications"
$payload = @{
    'displayName'=$global:aadDisplayName;
    'homepage'='https://www.contoso.com';
    'identifierUris'= $global:aadIdentifierUris;
    'keyCredentials'[email protected]($global:aadSecret)
}
$payload = ConvertTo-Json -InputObject $payload
$uri = "https://graph.windows.net/$($global:tenant)/$($resource)?api-version=1.6"
$result = (Invoke-RestMethod -Uri $uri -Headers $global:authHeader -Body $payload -Method POST -Verbose).value

Как только ответ вернется, вы сможете извлечь нужные значения конфигурации.

# Extract configuration values
$keyObject = foreach($i in $result.keyCredentials) { $i }

# Tenant ID
$global:aadTenantId = Get-AzureRmSubscription | Select-Object -ExpandProperty TenantId
# Application object ID
$global:aadApplicationObjectId = $result | Select-Object -ExpandProperty objectId
# App ID / Client ID
$global:aadClientId = $result | Select-Object -ExpandProperty appId
# Application Secret/Key
$global:aadAppSecret = $keyObject | Select-Object -ExpandProperty keyId

Надеюсь, это поможет кому-то!

Ответ 4

Я написал несколько powershell скрипты, которые будут

  • Создайте приложения AAD (главным образом, ответ Matt's)
  • Создать хранилище ключей в Azure
  • Создайте ключ в хранилище ключей
  • Назначить разрешения для хранилища ключей для приложений AAD

Я знаю, что это больше, чем то, о чем вы просите, но если, как и я, вы заинтересованы в возврате секретного (aka key) из приложения (того же самого добавьте в портал, который вы должны скопировать, прежде чем его больше не увидеть), затем second script позволит вам явно отправить это в как часть полезной нагрузки при вызове Graph API. script сохранит это для файла, для которого вы позже будете ссылаться.

Другие сценарии на самом деле не то, о чем вы просите, но вы все равно можете найти их полезными, если вам когда-либо понадобится настроить SQL Server для работы с Azure Key Vault для TDE или шифрования на уровне столбца.