web-dev-qa-db-fra.com

API de graphes - Privilèges insuffisants pour terminer l'opération

Lorsque j'essaie d'accéder au client du service graphique à l'aide de l'erreur reçue:

Code: Authorization_RequestDenied
Message: Privilèges insuffisants pour terminer l'opération.

Après avoir recherché cette erreur, la solution la plus courante consistait à définir les autorisations pour l'API. Cela avait déjà été fait et est autorisé à lire les profils de base/complets. 

J'ai supprimé et ré-ajouté les API. 

Ci-dessous le code de ma classe AzureAuthenticationProvider qui hérite de IAuthenticationProvider

public class AzureAuthenticationProvider : IAuthenticationProvider
{
    private string _azureDomain = "myDevDom.onmicrosoft.com";

    public async Task AuthenticateRequestAsync(HttpRequestMessage request)
    {
        try
        {
            string clientId = "2b823c67-1b0d-4a10-a9e1-737142516f5q";
            string clientSecret = "xxxxxx";

            AuthenticationContext authContext = new AuthenticationContext("https://login.windows.net/" + _azureDomain + "/oauth2/token");

            ClientCredential credentials = new ClientCredential(clientId, clientSecret);

            AuthenticationResult authResult = await authContext.AcquireTokenAsync("https://graph.Microsoft.com/", credentials);

            request.Headers.Add("Authorization", "Bearer " + authResult.AccessToken);
        }
        catch (Exception ex)
        {
        }
    }
}

J'ai essayé de changer le secret du client en un identifiant invalide et une erreur a été renvoyée. La clé du client est donc correcte. J'ai également essayé de vérifier que le jeton d'accès est valide en modifiant le jeton d'accès. Cela renvoie également une erreur. 

Le code ci-dessus semble bien fonctionner. 

Vous trouverez ci-dessous le code où j'essaie d'accéder à Azure AD:

public async Task<IGraphServiceUsersCollectionPage> GetUsersByLastName(string lastname)  
{
    GraphServiceClient graphClient = new GraphServiceClient(new AzureAuthenticationProvider());
    string filter = String.Format("startswith(surname, '{0}')", lastname);
    IGraphServiceUsersCollectionPage users = await graphClient.Users.Request().Filter(filter).GetAsync(); //Fails on this line
    return users;
}

Toute aide est très appréciée et merci d'avance pour toute aide.  azureADpermissionProperties

18
j9070749

Veuillez vous référer aux étapes ci-dessous:

  1. De votre capture d'écran, vous semblez accorder l'autorisation Read and write directory data à Windows Azure Active Directory (api Azure ad graph). Puisque vous utilisez le graphique Microsoft ( https://graph.Microsoft.com/ ), vous devez accorder l’autorisation d’application pour Microsoft Graph:  enter image description here

  2. Puisque vous êtes administrateur dans votre AAD, vous pouvez accorder l’autorisation aux utilisateurs de l’organisation en cliquant sur le bouton Grant permission indiqué dans la capture d’écran ci-dessus.

  3. Vous pouvez ensuite utiliser votre code (flux d'informations d'identification du client pour obtenir le jeton) et interroger les informations des utilisateurs. Si vous vérifiez les revendications dans le jeton d'accès émis par l'annonce Azure, vous pouvez trouver l'autorisation Directory.Read.All dans la revendication roles.

9
Nan Yu

 Grant permission Assurez-vous de cliquer sur "Accorder des autorisations" puis sur Oui pour tous les comptes d'utilisateurs.

9
user1166305

Pour moi, la clé pour résoudre ce problème était l'indice:

Pour utiliser l'API Graph avec votre locataire B2C, vous devez enregistrer une application dédiée à l'aide du menu d'enregistrement générique des applications (Tous les services, mais pas par défaut dans la liste Favoris) dans le portail Azure, PAS Azure AD B2C Menu Applications. Vous ne pouvez pas réutiliser les applications B2C déjà existantes que vous avez enregistrées dans le menu Applications d'Azure AD B2C.

Vous trouverez plus d’informations à la page Démo d’accès AD B2C aPI

5
Honza P.

Dans certains cas, le problème se produit car nous utilisons "Autorisations d'application" au lieu de "Autorisations déléguées". Dans mon application, j'ai essayé de répertorier tous les utilisateurs disposant d'autorisations d'application et cela ne fonctionnait pas. Lorsque je suis passé à une autorisation déléguée, cela a fonctionné.

Donc, une vérification rapide serait comme ceci:

  1. Vérifiez si vous utilisez API Microsoft Graph ou autre chose
  2. Utiliser Autorisations déléguées
  3. Cliquez sur Accorder des autorisations bouton pour propager les autorisations :)

J'espère que cela aiderait quelqu'un.

2
milan.latinovic

Supposons que vous souhaitiez créer un groupe dans Azure Active Directory Je dois effectuer les étapes suivantes pour résoudre ce problème.

  1. AD> App enregistrée> votre application
  2. Sélectionnez l'autorisation requise
  3. Cliquez sur Ajouter, sélectionnez Microsoft Graph et ajoutez-le.
  4. sélectionnez Microsoft Graph
  5. sélectionnez Lire et écrire tous les groupes de la liste des autorisations déléguées
  6. Et enregistrez
  7. Sélectionnez Windows Azure Active Directory et accordez toutes les autorisations d'application.
  8. Sauvegarde le
1
Bilal Malik

Il semble que votre application ne dispose pas de suffisamment de droits pour accéder aux informations AD. Vous pouvez suivre les étapes mentionnées dans le lien/article ci-dessous pour vous connecter au portail Azure et voir si votre application dispose de suffisamment de privilèges pour accéder à AD.

http://www.morgantechspace.com/2016/01/graph-api-insufficient-privileges-to-complete-the-operation.html

https://docs.Microsoft.com/en-us/Azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet

De plus, j'espère que "authResult.AccessToken" n'est pas nul dans votre cas ... Un point, le deuxième lien ci-dessus a une explication très détaillée sur les droits d'accès des applications à AD. pourrait être utile pour vous.

1
Sujith