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.
Veuillez vous référer aux étapes ci-dessous:
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
:
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.
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
.
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
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:
J'espère que cela aiderait quelqu'un.
Supposons que vous souhaitiez créer un groupe dans Azure Active Directory Je dois effectuer les étapes suivantes pour résoudre ce problème.
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.
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.