0

Pour continuer ma quête de création par programme et l'application Azure (suite de https://stackoverflow.com/a/44753728/1332416), j'ai un core qui acquiert un subscriptionID et un tenantId comme suit , mais je suis à perte car comment pourrais-je créer une application et son service principal associé localement. C'est essentiellement où New-AzureRmADApplication et New-AzureRmADServicePrincipal seraient utilisés dans le cas de PowerShell. Cette question est partiellement résolue à https://stackoverflow.com/a/44631758/1332416, mais il semble que .NET Core puisse être la cause de certains problèmes ici car les types ne sont pas à trouver.Création d'une application Azure AD et d'un service principal à l'aide de .NET Core (API et HTTP)

Pour être plus concret, j'ai le code comme suit pour

string resource = "https://management.core.windows.net/"; 
string clientId = "1950a258-227b-4e31-a9cf-717495945fc2"; 
string userName = "<replace>"; 
string password = "<replace>"; 
string apiVersion = "2016-06-01"; 

using(var client = new HttpClient()) 
{ 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
    string tokenEndpoint = "https://login.microsoftonline.com/common/oauth2/token"; 
    var body = $"resource={resource}&client_id={clientId}&grant_type=password&username={userName}&password={password}"; 
    var stringContent = new StringContent(body, Encoding.UTF8, "application/x-www-form-urlencoded"); 
    var response = await client.PostAsync(tokenEndpoint, stringContent).ConfigureAwait(false); 
    var result = await response.Content.ReadAsStringAsync().ConfigureAwait(false); 

    JObject jobject = JObject.Parse(result); 
    var token = jobject["access_token"].Value<string>(); 

    client.DefaultRequestHeaders.Add("Authorization", $"bearer {token}"); 
    var subcriptions = await client.GetStringAsync($"https://management.azure.com/subscriptions?api-version={apiVersion}").ConfigureAwait(false); 
    var tenants = await client.GetStringAsync($"https://management.azure.com/tenants?api-version={apiVersion}").ConfigureAwait(false); 
    Console.WriteLine(subcriptions); 
    Console.WriteLine(tenants); 

    //We have the SubscriptionID, TenantId and the token to 
    //the subscription here. How to do New-AzureRmADApplication and New-AzureRmADServicePrincipal with the application ID here? Specifically I'm considering to use a certificate thumbrint if it matters. 
    //var subscription = "... from subscriptions..."; 
    //var tenantId = "... from tenants..."; 
} 

Répondre

2

Vous pouvez acquérir un jeton et d'appeler l'accès API Azure AD graphique pour créer le principal de l'application et le service. (API Microsoft Graph permet également, bien que par le point de terminaison bêta)

Vous trouverez la documentation de l'entité d'application ici: https://msdn.microsoft.com/en-us/library/azure/ad/graph/api/entity-and-complex-type-reference#application-entity

Pour acquérir le jeton, votre application devra disposer des autorisations déléguées nécessaires/app accordé dans Azure AD pour Azure AD Graph API.

Ensuite, lorsque vous obtenez le jeton, utilisez https://graph.windows.net comme ressource.

Ensuite, vous devriez être en mesure de POST à ​​https://graph.windows.net/tenant-id/applications?api-version=1.6 avec un corps comme celui-ci:

{ 
    "displayName":"Test app", 
    "identifierUris": [ 
    "https://mytenant.onmicrosoft.com/testapp" 
    ], 
    "homePage":"http://localhost" 
} 

Remplacer locataire-id dans l'URL avec votre identifiant de locataire.

C'est l'application créée, dans la réponse, vous obtiendrez l'application créée. Saisissez le champ appId, vous en aurez besoin pour créer le service principal.

Puis faire un POST: https://graph.windows.net/tenant-id/servicePrincipals?api-version=1.6 avec un corps comme celui-ci:

{ 
    "appId":"eb167a6d-aaaa-aaaa-aaaa-46e981be37fa" 
} 

Et cela devrait créer le service principal correspondant.

+0

Microsoft semble recommander l'utilisation de la nouvelle API graphique, voir https://msdn.microsoft.com/fr-fr/library/azure/ad/graph/howto/azure-ad-graph-api-operations-overview pour exemple. Laissez-moi examiner un peu ... – Veksi

+0

Oui :) Mais la fonctionnalité spécifique est encore seulement sur le point de terminaison bêta de MS Graph. Si vous êtes prêt à l'utiliser, vous pouvez l'utiliser en même temps. – juunas

+0

Comme vous le savez probablement, il est déjà près de minuit. Je n'ai pratiquement aucune connaissance de ces API, donc je dois reporter l'expérimentation jusqu'à demain. Mais je pense que la bêta est la voie à suivre, je suis un peu inquiet de savoir comment cela se passe avec le code que j'ai déjà (à peine) fonctionné (voir le code) et .NET Core, donc expérimenter un peu et voir si je devrais mettre à jour la question (peut-être je devrais remplacer 'azure-graph-api' – Veksi