2

Je crée actuellement mes applications manuellement sur le répertoire Azure Active à chaque demande de nouvel environnement. J'explorais les moyens de créer ces applications à partir du code via l'API REST. J'ai réussi à créer des utilisateurs et des groupes sur des applications existantes en utilisant 'client_credentials' comme indiqué.Comment créer des applications par programmation dans Azure AD

ClientCredential clientCred = new ClientCredential(clientID, clientSecret); 
AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenAsync(resAzureGraphAPI, clientCred); 

De la même manière, j'ai essayé d'utiliser le 'access_token' généré par le haut pour créer une nouvelle application adClient.Applications.AddApplicationAsync (newApplication) .wait()

Mais cela jette un ERROR- " Privilèges insuffisants pour terminer l'opération. "

J'ai regardé d'autres threads et la page msdn Azure AD et il s'avère que le flux client_credentials ne prend pas en charge la création/mise à jour d'applications.

Adding Applications programmatically in Azure AD using Client Credentials Flow

Le fil indiqué ci-dessus également de cette façon de la solution de contournement était en utilisant le flux 'de grant_type = mot de passe. J'ai essayé comme suggéré mais je continue à obtenir l'erreur suivante qui n'a pas de sens pour moi.

"error": "invalid_grant", 
    "error_description": "AADSTS50034: To sign into this application the account must be added to the 1283y812-2u3u-u293u91-u293u1 directory.\r\nTrace ID: 66da9cf9-603f-4f4e-817a-cd4774619631\r\nCorrelation ID: 7990c26f-b8ef-4054-9c0b-a346aa7b5035\r\nTimestamp: 2016-02-21 23:36:52Z", 
    "error_codes": [ 
     50034 
    ], 

Voici la charge utile et le point de terminaison que je frappe. L'utilisateur qui est passé est le propriétaire de l'AD où je veux créer l'application

endpoint:https://login.windows.net/mytenantID/oauth2/token 

post data 
resource 00000002-0000-0000-c000-000000000000 
client_id id 
client_secret secret 
grant_type password 
username [email protected] 
password password 
scope  openid 

Toute pensée ou des suggestions de l'endroit où je pourrais aller mal serait apprécié.

Répondre

0

Vous pouvez utiliser PowerShell pour créer vos applications:

$servicePrincipalName =”Your Client App Name” 
$sp = New-MsolServicePrincipal -ServicePrincipalNames $servicePrincipalName -DisplayName $servicePrincipalName -AppPrincipalId “Your Client ID" 
New-MsolServicePrincipalCredential -ObjectId $sp.ObjectId -Type Password -Value “Your client secret” 
Add-MsolRoleMember -RoleObjectId “62e90394-69f5-4237-9190-012177145e10" -RoleMemberType ServicePrincipal -RoleMemberObjectId $sp.ObjectId 

Le rôle désigné par 62e90394-69f5-4237-9190-012177145e10 est le rôle de l'administrateur, et cela peut être ajustée selon les besoins à l'ObjectId de tout autre rôle. Exécutez Get-MsolRole pour obtenir une liste de rôles et ObjectIds.

Vous pouvez ensuite exécuter ce code à partir de votre application ou l'exécuter manuellement. Vous devrez également exécuter votre code de connexion avant ce qui précède, quelque chose comme:

$loginAsUserName = "Your Tenancy Admin Account" 
$loginAsPassword = "Your Tenancy Admin Account Password" 

$secpasswd = ConvertTo-SecureString $loginAsPassword -AsPlainText -Force 
$creds = New-Object System.Management.Automation.PSCredential ($loginAsUserName, $secpasswd) 

Connect-MsolService -Credential $creds 
+0

je suis connecté en vous connectant avec 'Connect-MsolService'. 'Get-MsolRole' a énuméré un tas de rôles et leurs noms. Ensuite, j'ai voulu vérifier mon rôle. J'ai donc lancé 'Get-MsolUserRole -UserPrincipalName test @ mydomain.com'. Cela est retourné vide. Quand je dois créer un 'New-MsolServicePrinicpal', j'obtiens toujours l'erreur - _Access denied. vous n'êtes pas autorisé à accéder à cette cmdlet. – Srikanth

0

J'ai été en mesure de créer l'application dans mon locataire. Le locataire AD que j'utilisais pour créer l'application sous a été vérifié pour un domaine différent. Fondamentalement, j'ai fini par brancher un utilisateur de ce domaine et en utilisant le flux resource_type = mot de passe était capable de générer un jeton d'accès.Ensuite, tirer les lignes de code ci-dessous a fait le tour

ActiveDirectoryClient adClient = new ActiveDirectoryClient(
       serviceRoot, 
       AccessToken); 
adClient.Applications.AddApplicationAsync(newApplication).Wait(); 
0

Vérifiez les choses suivantes qui semblent être un peu loin dans votre POST au point final jeton OAuth:

  • Lorsque vous désirez accéder au graphique API de votre Azure AD, vous devrez passer https://graph.windows.net comme paramètre de corps resource; Ceci est (imho) pas bien documenté, mais c'est ce que vous devez faire
  • Comme client_id et client_secret vous devez transmettre l'ID du client et la clé d'une application prédéfinie à l'intérieur de votre Azure AD qui à son tour vous avez accordé des autorisations sur un par niveau d'utilisateur à; ceux-ci doivent être suffisantes pour ajouter des applications
  • Le paramètre scope n'est pas utilisé, je pense; vous obtiendrez les demandes que vous avez définies à l'intérieur du portail de gestion AD Azure retour (les autorisations attribuées à votre application)

Ce jeton doit vous rendre un accès que vous pouvez ensuite utiliser sur les https://graph.windows.net/tenantId/ points d'extrémité.

Espoir qui aide, Martin