2016-01-11 2 views
4

J'essaie d'utiliser l'API de graphe Azure Active Directory (avec le package de nuget Azure GraphClient) pour créer une nouvelle application dans Azure AD.Création d'une application dans Azure Active Directory à l'aide de l'API de graphe Échec

Je me suis authentifié en utilisant une application AAD existante, j'ai donc un accès en écriture au répertoire.

Cependant, lors de la création de la nouvelle application objectent les API retourne Azure Graph cette erreur:

{"odata.error": { 
    "code":"Request_BadRequest", 
    "message": { 
     "lang":"en", 
     "value":"Property value cannot have duplicate id or claim values." 
    }, 
    "values": 
     [{ 
     "item":"PropertyName", 
     "value":"None" 
     }, 
     { 
     "item":"PropertyErrorCode", 
     "value":"DuplicateValue" 
     } 
    ] 
    } 
} 

Il ne dit pas que la propriété a une valeur en double identifiant ou de la revendication - il y a deux espaces dans le message d'erreur comme si le nom était manquant.

Le code qui crée l'objet Application est la suivante:

var appname = "Test Application create " + DateTime.Now.Ticks; 
var application = new Application() 
     { 
      AvailableToOtherTenants = false, 
      DisplayName = appname, 
      ErrorUrl = null, 
      GroupMembershipClaims = null, 
      Homepage = "http://www.domain.com", 
      IdentifierUris = new List<string>() {{"https://domain.com/"+ appname } }, 
      KeyCredentials = new List<KeyCredential>(), 
      KnownClientApplications = new List<Guid>(), 
      LogoutUrl = null, 
      Oauth2AllowImplicitFlow = false, 
      Oauth2AllowUrlPathMatching = false, 
      Oauth2Permissions = new List<OAuth2Permission>() 
      { 
       { 
        new OAuth2Permission() 
        { 
         AdminConsentDescription = 
          $"Allow the application to access {appname} on behalf of the signed-in user.", 
         AdminConsentDisplayName = $"Access {appname}", 
         Id = Guid.NewGuid(), 
         IsEnabled = true, 
         Type = "User", 
         UserConsentDescription = 
          $"Allow the application to access {appname} on your behalf.", 
         UserConsentDisplayName = $"Access {appname}", 
         Value = "user_impersonation" 
        } 
       } 
      }, 
      Oauth2RequirePostResponse = false, 
      PasswordCredentials = new List<PasswordCredential>(), 
      PublicClient = false, 
      ReplyUrls = new List<string>(), 
      RequiredResourceAccess = new List<RequiredResourceAccess>(), 
      SamlMetadataUrl = null, 
      ExtensionProperties = new List<ExtensionProperty>(), 
      Manager = null, 
      ObjectType = "Application", 
      DeletionTimestamp = null, 
      CreatedOnBehalfOf = null, 
      CreatedObjects = new List<DirectoryObject>(), 
      DirectReports = new List<DirectoryObject>(), 
      Members = new List<DirectoryObject>(), 
      MemberOf = new List<DirectoryObject>(), 
      Owners = new List<DirectoryObject>(), 
      OwnedObjects = new List<DirectoryObject>() 
    }; 
await client.Applications.AddApplicationAsync(application); 

Suis-je manque une propriété? Il ne semble pas y avoir de propriétés non uniques et l'application est créée avec un nom unique.

Répondre

4

Le message d'erreur est en effet très confus, mais le problème est que vous essayez de définir une valeur portée (user_impersonation) qui est déjà définie.

Si vous exécutez ce code, vous trouverez que l'application est créée avec succès dans votre répertoire:

var appname = "Test Application create " + DateTime.Now.Ticks; 
var application = new Application() 
     { 
      AvailableToOtherTenants = false, 
      DisplayName = appname, 
      ErrorUrl = null, 
      GroupMembershipClaims = null, 
      Homepage = "http://www.domain.com", 
      IdentifierUris = new List<string>() {{"https://domain.com/"+ "Test" } },// CHANGED LINE 
      KeyCredentials = new List<KeyCredential>(), 
      KnownClientApplications = new List<Guid>(), 
      LogoutUrl = null, 
      Oauth2AllowImplicitFlow = false, 
      Oauth2AllowUrlPathMatching = false, 
      Oauth2Permissions = new List<OAuth2Permission>() 
      { 
       { 
        new OAuth2Permission() 
        { 
         AdminConsentDescription = 
          $"Allow the application to access {appname} on behalf of the signed-in user.", 
         AdminConsentDisplayName = $"Access {appname}", 
         Id = Guid.NewGuid(), 
         IsEnabled = true, 
         Type = "User", 
         UserConsentDescription = 
          $"Allow the application to access {appname} on your behalf.", 
         UserConsentDisplayName = $"Access {appname}", 
         Value = "custom_scope" // CHANGED LINE 
        } 
       } 
      }, 
      Oauth2RequirePostResponse = false, 
      PasswordCredentials = new List<PasswordCredential>(), 
      PublicClient = false, 
      ReplyUrls = new List<string>(), 
      RequiredResourceAccess = new List<RequiredResourceAccess>(), 
      SamlMetadataUrl = null, 
      ExtensionProperties = new List<ExtensionProperty>(), 
      Manager = null, 
      ObjectType = "Application", 
      DeletionTimestamp = null, 
      CreatedOnBehalfOf = null, 
      CreatedObjects = new List<DirectoryObject>(), 
      DirectReports = new List<DirectoryObject>(), 
      Members = new List<DirectoryObject>(), 
      MemberOf = new List<DirectoryObject>(), 
      Owners = new List<DirectoryObject>(), 
      OwnedObjects = new List<DirectoryObject>() 
    }; 
await client.Applications.AddApplicationAsync(application); 

En outre, votre IdentifierUris ne peut pas contenir des espaces, donc je l'ai changé pour une chaîne hardcoded.

HTH

+0

Merci. Je viens de recréer exactement ce que j'ai vu dans un fichier manifeste qui a les paramètres corrects, il n'était pas clair que certaines valeurs par défaut seraient déjà présentes lorsque j'aurais ajouté l'application via le code. – RasmusW