wake-up-neo.net

Wie kann ich eine Anwendung programmgesteuert zu Azure AD hinzufügen?

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!

27
Eric

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!

38
Shawn Tabrizi

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!

4
matt-ankerson

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

2
Carl in 't Veld

Ich habe einige Powershell Skripte geschrieben, die das tun werden

  • Erstellen Sie AAD-Anwendungen (hauptsächlich dank Mats answer)
  • Erstellen Sie ein Schlüsselsafe in Azure
  • Erstellen Sie im Key Vault einen Schlüssel
  • Weisen Sie dem Schlüssellager Berechtigungen für die AAD-Anwendungen zu

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.

0
bjh1977