2 votes

Microsoft Graph API - Privilèges insuffisants pour terminer l'opération

Je suis en train d'essayer d'utiliser Microsoft Graph API pour mettre à jour un autre utilisateur dans Active Directory.

J'ai les autorisations suivantes définies pour l'utilisateur et l'application sur https://apps.dev.microsoft.com/

J'ai demandé les scopes suivants:

  • Directory.ReadWrite.All
  • User.ReadWrite.All
  • Group.ReadWrite.All

Je suis capable de lister tous les utilisateurs dans le répertoire, mais lors de la tentative de mise à jour (dans ce cas, la city), cela échoue:

GraphServiceClient graphClient = SDKHelper.GetAuthenticatedClient ();
var usersResponse = graphClient.Users.Request ().GetAsync ();
var users = usersResponse.Result;

// user id codé en dur pour le moment
var userId = "9a5b83cd-85ff-4ad1-ab2f-b443941a518e";

var user = users.FirstOrDefault (m => m.Id == userId);
if (user != null) {
    user.City = "New York";
    await graphClient.Me.Request ().UpdateAsync (user);
}

Je reçois:

{
    Code : Authorization_RequestDenied
    Message : Insufficient privileges to complete the operation.
    Inner error
}

L'utilisateur avec lequel je suis connecté est un administrateur global du répertoire.

J'ai pris le jeton JWT, je me suis rendu sur https://jwt.io et voici les rôles que je vois:

  • Directory.Read.All
  • Directory.ReadWrite.All
  • Files.ReadWrite
  • Group.ReadWrite.All
  • Mail.Send
  • User.Read
  • User.Read.All
  • User.ReadWrite.All

Est-ce que j'ai besoin d'autres autorisations pour que cela fonctionne ?

En fin de compte, j'aimerais créer une application console (pas une application web) pour mettre à jour les informations d'autres utilisateurs dans le répertoire. Mais j'ai pensé que l'utilisation de cette application exemple fournie par Microsoft est un bon début.

3voto

Marc LaFleur - MSFT Points 747

La raison pour laquelle vous voyez ceci est que vous passez l'objet user complet plutôt que seulement la propriété city. En d'autres termes, vous essayez de mettre à jour chaque propriété dans cet enregistrement user, y compris plusieurs qui sont en lecture seule.

C'est l'un de ces cas où avoir un SDK qui encapsule une API REST peut entraîner des erreurs déroutantes. Comme API REST, elle est sans état, donc passer l'ensemble complet des propriétés de l'objet user indique à l'API que vous voulez PATCH toutes ces valeurs.

Vous passez également un autre objet user dans l'objet me (c'est-à-dire que vous remplacez toutes vos valeurs de propriété par les valeurs de propriété de cet autre utilisateur):

await graphClient.Me.Request().UpdateAsync(user);

Essayez plutôt ceci:

GraphServiceClient graphClient = SDKHelper.GetAuthenticatedClient ();

// en codant en dur l'identifiant de l'utilisateur pour l'instant
var userId = "9a5b83cd-85ff-4ad1-ab2f-b443941a518e";

await graphClient.Users[userId].Request ().UpdateAsync(new User
{
    City = "New York"
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X