web-dev-qa-db-fra.com

Comment ajouter une application à Azure AD par programme?

Je souhaite automatiser la création de mon application dans Azure AD et récupérer l'identifiant du client généré par Azure AD.

Existe-t-il des commandlets PowerShell pour le faire? Existe-t-il un autre moyen, comme une API, de le faire en plus de la console de gestion?

Pouvez-vous me donner un exemple?

Merci!

27
Eric

Vous pouvez créer une application dans AAD par programmation de plusieurs manières. Je traiterai brièvement de deux manières différentes de procéder: les CMDLET PowerShell et l’API Graph. En général, je recommanderais fortement d'utiliser l'API Graph pour cela.

PowerShell:

Il existe quelques modules différents qui permettent de créer des applications/services de base AAD. Si vous devez créer un nouvel objet d'application dans votre locataire, vous pouvez utiliser Azure PowerShell pour effectuer l'appel suivant:

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

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

Si vous devez créer un principal de service pour votre application dans votre locataire, vous pouvez utiliser 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"

API Graph: (Recommandé)

Vous pouvez également créer des applications en créant un POST dans notre API Graph: https://msdn.Microsoft.com/Library/Azure/Ad/Graph/api/entity-and-complex-type -reference # ApplicationEntity

Nous avons des exemples qui montrent comment vous pouvez vous inscrire et créer une application pour cibler l'API Graph et utiliser la bibliothèque Graph Client pour vous aider à appeler correctement l'API:

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

J'espère que ça aide!

38
Shawn Tabrizi

Je suis un peu en retard à la fête - mais j'ai récemment rencontré ce défi aussi. Voici les extraits pertinents de ma solution ...

Vous devez d’abord obtenir le jeton d’authentification. Pour cela, vous pouvez utiliser cette fonction pratique.

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
}

(emprunté à Paulo Marques https://blogs.technet.Microsoft.com/paulomarques/2016/03/21/working-with-Azure-active-directory-graph-api--powershell/ )

Vous pouvez ensuite envoyer une demande POST à l'API Graph Azure Active Directory afin de créer votre application. Cependant, une petite configuration est requise.

# 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()
}

Vous pouvez maintenant appuyer sur l’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

Une fois la réponse renvoyée, vous pouvez extraire les valeurs de configuration dont vous avez besoin.

# 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

J'espère que cela aide quelqu'un!

4
matt-ankerson

Microsoft a publié deux autres applets de commande PowerShell pour enregistrer une application et définir les informations d'identification:

New-AzureRmADApplication
New-AzureRmADServicePrincipal
New-AzureRmRoleAssignment 
Add-AzureADApplicationCredential 

Veuillez consulter leur documentation: https://docs.Microsoft.com/en-us/Azure/azure-resource-manager/resource-group-authenticate-service-principal

2
Carl in 't Veld

J'ai écrit quelques PowerShell scripts qui seront

  • Créer des applications AAD (principalement grâce à Matt's answer)
  • Créer un coffre-fort de clés dans Azure
  • Créer une clé dans le coffre à clés
  • Attribuer des autorisations au coffre de clés pour les applications AAD

Je sais que c'est plus que ce que vous demandez, mais si, comme moi, vous souhaitez récupérer le secret (clé)} de l'application (le même que vous avez ajouté dans le portail que vous devez copier avant de ne plus jamais le voir), le script second vous permettra de l’envoyer explicitement dans le cadre de la charge utile lors d’un appel à l’API Graph. Le script enregistrera cela dans un fichier que vous pourrez consulter ultérieurement.

Les autres scripts ne sont pas vraiment ce dont vous parlez, mais vous pouvez toujours les trouver utiles si vous avez besoin de configurer SQL Server pour qu’il fonctionne avec Azure Key Vault pour TDE ou un chiffrement au niveau de la colonne.

0
bjh1977