0

J'ai enregistré une application native dans Azure AD et donné toutes les autorisations de délégué pour accéder à l'API graphique. J'essaie de tester cette solution avec une solution de console (exe) avec le code suivant qui utilise ID client et secretBibliothèque Azure ADAL pour accéder à l'API graphique Microsoft

private static async void AcquireTokenAsync() { 
      AuthenticationContext context = new AuthenticationContext("https://login.windows.net/xxxxxx-xxxx-485b-a40f-xxxxxxxx/oauth2/token", true); 
      var result = await context.AcquireTokenAsync("https://graph.microsoft.com", 
                 new ClientCredential("xxxxxx-32cf-xxxx-8888-555555555555", 
                 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxV89cWfH0w=" 
                ) 
                ); 

      HttpClient client = new HttpClient(); 
      client.DefaultRequestHeaders.Add("Authorization", "Bearer " + result.AccessToken); 
      HttpResponseMessage response = await client.GetAsync("https://graph.microsoft.com/v1.0/users/"); 
      string retResp = await response.Content.ReadAsStringAsync(); 
      string token = result.AccessToken; 
      Console.WriteLine(token + "\n" + restResp); 

} 

Il n'y a pas de problème à récupérer token.I reçois le accesstoken mais avec l'erreur suivante/réponse dans l'appel graphique api avec le jeton

{ 
    "error": { 
    "code": "Authorization_RequestDenied", 
    "message": "Insufficient privileges to complete the operation.", 
    "innerError": { 
     "request-id": "cb7aaaa9-d9a0-485a-7777-b5bfe68ba771", 
     "date": "2017-07-22T11:01:49" 
    } 
    } 
} 

S'il vous plaît suggérer ce qui se passe mal

Répondre

1

S'il vous plaît jeter un oeil à la différence entre les autorisations déléguées et app seulement here. Le problème que vous rencontrez est que vous avez demandé des autorisations Delegated à l'API graphique, mais que vous obtenez un jeton App Only, qui requiert un type d'autorisation différent. Si vous take a look at your token vous verrez que votre jeton manque les revendications requises pour faire des appels au graphique.

Au lieu de cela, vous devez faire une des opérations suivantes:

  1. obtenir un jeton App + d'utilisateur suivant le code d'autorisation de subvention de flux. Cela entraînera un accès délégué au graphique et votre appel devrait fonctionner.
  2. Demander des autorisations App Only à l'API de graphique. Cela permettra à votre méthode d'authentification actuelle d'accéder à l'API graphique. Toutefois, toutes les autorisations App Only nécessitent un administrateur pour autoriser l'application.
+0

Merci Shawn! J'ai essayé avec App et déléguer des autorisations avec l'enregistrement de l'application Web API. Point 1 est bon et je suis capable d'accéder aux ressources (appel REST). –

+0

Pour le point 2, faites-vous référence à l'option Autoriser l'autorisation sous le portail pour l'administrateur. Lorsque j'essaie avec Grant Autorisation sur l'API Web, je peux accéder aux ressources par le biais du délégué ou de l'application. où seule l'autorisation de délégué existe, je suis incapable d'appeler des ressources (privilège insuffisant). Je suppose, les ressources à travers l'application native uniquement accessible en utilisant le flux d'octroi de code d'autorisation. J'ai aussi remarqué, même si j'ai supprimé toutes les permissions de ressources pour une API Web (après l'octroi), je suis capable de faire des appels et d'obtenir des résultats. –

+0

Oui, les clients natifs, par définition, ne peuvent pas effectuer des appels d'application uniquement car ils ne peuvent pas contenir de secret client. Vous devez toujours utiliser un flux délégué dans cette situation. –