Ich möchte die Erstellung meiner Anwendung in Azure AD automatisieren und die von Azure AD generierte Client-ID zurückholen.
Gibt es PowerShell-Befehlszeilen, um dies auszuführen? Gibt es noch andere Möglichkeiten, wie zum Beispiel eine API, außer der Verwaltungskonsole?
Kannst du mich auf ein Beispiel verweisen?
Vielen Dank!
Es gibt verschiedene Möglichkeiten, wie Sie eine Anwendung programmatisch in AAD erstellen können. Ich werde kurz auf zwei verschiedene Arten eingehen, die Sie dabei ausführen können: PowerShell CMDLETs und die Graph-API. Im Allgemeinen würde ich die Verwendung der Graph-API dafür dringend empfehlen.
Power Shell:
Es gibt einige verschiedene Module, die in der Lage sind, AAD Applications/Service Principals zu erstellen. Wenn Sie in Ihrem Mandanten ein neues Anwendungsobjekt erstellen müssen, können Sie mit Azure PowerShell den folgenden Aufruf ausführen:
https://msdn.Microsoft.com/de-de/library/mt603747.aspx
PS C:\> New-AzureRmADApplication -DisplayName "NewApplication" -HomePage "http://www.Contoso.com" -IdentifierUris "http://NewApplication"
Wenn Sie in Ihrem Mandanten einen Service Principal für Ihre Anwendung erstellen müssen, können Sie Azure AD PowerShell verwenden:
https://msdn.Microsoft.com/de-de/library/Azure/jj151815.aspx
https://msdn.Microsoft.com/de-de/library/Azure/dn194119.aspx
New-MsolServicePrincipal -ServicePrincipalNames @("MyApp/Contoso.com") -DisplayName "My Application"
Graph API: (Empfohlen)
Sie können Anwendungen auch erstellen, indem Sie ein POST für unsere Graph-API erstellen: https://msdn.Microsoft.com/Library/Azure/Ad/Graph/api/entity-and-complex-type -referenz # ApplicationEntity
Wir haben Beispiele, die zeigen, wie Sie sich registrieren und eine Anwendung erstellen können, die auf die Graph-API abzielt, und die Graph Client Library verwenden, um Sie bei der Durchführung der korrekten Aufrufe der API zu unterstützen:
https://github.com/AzureADSamples/WebApp-GraphAPI-DotNet
Ich hoffe das hilft!
Ich bin ein bisschen spät auf der Party - aber auch ich bin dieser Herausforderung kürzlich begegnet. Hier sind die relevanten Auszüge aus meiner Lösung ...
Zuerst müssen Sie das Authentifizierungstoken abrufen. Dafür können Sie diese praktische Funktion nutzen.
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
}
(Entlehnt von Paulo Marques https://blogs.technet.Microsoft.com/paulomarques/2016/03/21/working-with-Azure-active-directory-graph-api-from-powershell/ )
Sie können dann eine POST - Anforderung an die Azure Active Directory-Diagramm-API senden, um Ihre Anwendung zu erstellen. Es ist jedoch ein kleines Setup erforderlich.
# 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()
}
Jetzt können Sie die Graph-API aufrufen.
$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
Sobald die Antwort zurückkommt, können Sie die erforderlichen Konfigurationswerte extrahieren.
# 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
Ich hoffe das hilft jemandem!
Microsoft hat einige zusätzliche PowerShell-Cmdlets veröffentlicht, um eine App zu registrieren und Anmeldeinformationen festzulegen:
New-AzureRmADApplication
New-AzureRmADServicePrincipal
New-AzureRmRoleAssignment
Add-AzureADApplicationCredential
Bitte lesen Sie deren Dokumentation: https://docs.Microsoft.com/de-de/Azure/azure-resource-manager/resource-group-authenticate-service-principal
Ich habe einige Powershell Skripte geschrieben, die das tun werden
Ich weiß, dass dies mehr ist als das, wonach Sie verlangen, aber wenn Sie wie ich daran interessiert sind, das secret (auch als Schlüssel bezeichnet) aus der Anwendung (derselbe, den Sie im Portal hinzufügen) zurückzugewinnen kopieren, bevor Sie es nie wieder sehen), dann erlaubt Ihnen das second - Skript, das explizit als Teil der Payload in einem Aufruf an die Graph-API zu senden. Das Skript speichert es in einer Datei, auf die Sie später zugreifen können.
Die anderen Skripts sind zwar nicht wirklich das, worum Sie fragen, aber Sie können sie dennoch nützlich finden, wenn Sie SQL Server für die Verwendung von Azure Key Vault für TDE oder die Verschlüsselung auf Spaltenebene einrichten müssen.