Как добавить приложение в Azure AD программным способом?
Я хочу автоматизировать создание моего приложения в Azure AD и вернуть идентификатор клиента, созданный Azure AD.
существуют ли для этого командлеты PowerShell? Есть ли какие-то другие средства, такие как API для этого, помимо консоли управления?
можете ли вы указать мне на пример?
спасибо!
4 ответов
Существует несколько способов программного создания приложения в AAD. Я кратко рассмотрю два разных способа, которыми вы можете это сделать: командлеты PowerShell и API Graph. В общем, я бы настоятельно рекомендовал использовать API Graph для этого.
PowerShell:
есть несколько различных модулей, работающих вокруг, которые имеют возможность создавать приложения AAD / участников службы. Если вам нужно создать новый объект приложения в клиент можно использовать 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: (рекомендуется)
вы также можете создавать приложения, делая запись на нашем графике ПРИКЛАДНОЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС: https://msdn.microsoft.com/Library/Azure/Ad/Graph/api/entity-and-complex-type-reference#ApplicationEntity
у нас есть примеры, которые показывают, как вы можете зарегистрировать и создать applicatoin для целевого API Graph и использовать клиентскую библиотеку Graph, чтобы помочь вам в правильных вызовах API:
https://github.com/AzureADSamples/WebApp-GraphAPI-DotNet
надеюсь, это поможет!
Я немного опоздала на вечеринку, но я недавно столкнулась с этой проблемой тоже. Вот соответствующие выдержки из моего решения...
сначала вам нужно получить токен аутентификации. Для этого вы можете использовать эту удобную функцию.
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
}
(заимствовано у Пауло Маркеса https://blogs.technet.microsoft.com/paulomarques/2016/03/21/working-with-azure-active-directory-graph-api-from-powershell/)
затем вы можете отправить запрос POST в API Azure Active Directory Graph для создания приложения. Однако требуется небольшая настройка.
# 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()
}
теперь вы можете нажать API Graph.
$resource = "applications"
$payload = @{
'displayName'=$global:aadDisplayName;
'homepage'='https://www.contoso.com';
'identifierUris'= $global:aadIdentifierUris;
'keyCredentials'=@($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
надеюсь, это кому-то поможет!
Microsoft выпустила несколько дополнительных командлетов PowerShell для регистрации приложения и установки учетных данных:
New-AzureRmADApplication
New-AzureRmADServicePrincipal
New-AzureRmRoleAssignment
Add-AzureADApplicationCredential
пожалуйста, просмотрите их документацию: https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authenticate-service-principal
Я написал некоторые powershell скрипты что будет
- создание приложений AAD (в основном благодаря Мэтт ответ)
- создайте хранилище ключей в Azure
- создайте ключ в хранилище ключей
- назначить разрешения на хранилище ключей для приложений AAD
Я знаю, что это больше, чем то, что вы просите, но если, как и я, вы заинтересованы в возвращении секрет (он же ключ) из приложения (тот же, который вы добавляете в портал, который вы должны скопировать, прежде чем никогда не видеть его снова), то второй скрипт позволит вам явно отправить это как часть полезной нагрузки в вызове API Graph. Скрипт сохранит это в файл, чтобы вы могли обратиться к нему позже.
другие сценарии не совсем то, о чем вы спрашиваете, но вы все равно можете найти их полезными, если вам когда-либо понадобится настроить SQL Server для работы с Azure Key Хранилище для шифрования на уровне столбцов или TDE.