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
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). –
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. –
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. –