Я уже как-то бью головой. Я хочу разработать веб-API, который будет использоваться в моем приложении Angular. Назначение API - создание / удаление Microsoft Teams с помощью Graph API.

У меня есть лазурное приложение с соответствующим разрешением. и ниже мой код, который продолжает давать мне ошибку 403.

Кто-нибудь может мне помочь? Кроме того, нужно ли мне применить разрешение к указанному ниже параметру для доступа к API-интерфейсу Grpah без взаимодействия с пользователем (как во всплывающем окне входа)

enter image description here

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
               .Create("d78eaba6-12fe-8139")
               .WithTenantId("fd49ee20-51a4-d930e2db05de")
               .WithClientSecret("WTeN7A7-oeOfi~c9gF..")
               .Build();

            var scopes = new string[] { "https://graph.microsoft.com/.default" };

            var authResult = await confidentialClientApplication.AcquireTokenForClient(scopes).ExecuteAsync();
            string token = authResult.AccessToken;

 await CallWebApiAndProcessResultASync("GET","https://graph.microsoft.com/v1.0/users", token, null, Display);

public static async Task CallWebApiAndProcessResultASync(string method,string webApiUrl, string accessToken, StringContent postValue, Action<JObject> processResult)
        {
            string request = string.Empty;
            if (!string.IsNullOrEmpty(accessToken))
            {
                using (HttpClient HttpClient = new HttpClient())
                {
                    var defaultRequestHeaders = HttpClient.DefaultRequestHeaders;
                    if (defaultRequestHeaders.Accept == null || !defaultRequestHeaders.Accept.Any(m => m.MediaType == "application/json"))
                    {
                        HttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    }
                    defaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

                    using (HttpRequestMessage httpRequestMessage = new HttpRequestMessage(new HttpMethod(method), webApiUrl) { Content = postValue })
                    {
                        var response = HttpClient.SendAsync(httpRequestMessage).Result;
                        if (response.IsSuccessStatusCode)
                        {
                            string json = await response.Content.ReadAsStringAsync();
                            JObject result = JsonConvert.DeserializeObject(json) as JObject;
                            Console.ForegroundColor = ConsoleColor.Gray;
                            processResult(result);
                        }
                        else
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine($"Failed to call the Web Api: {response.StatusCode}");
                            string content = await response.Content.ReadAsStringAsync();

                            // Note that if you got reponse.Code == 403 and reponse.content.code == "Authorization_RequestDenied"
                            // this is because the tenant admin as not granted consent for the application to call the Web API
                            Console.WriteLine($"Content: {content}");
                        }
                    }


                    Console.ResetColor();
                }
            }
        }
0
e2eDev 22 Сен 2020 в 07:08

1 ответ

Лучший ответ

Да, если вам не нужно взаимодействие с пользователем, вам просто нужно предоставить разрешения приложения для вашего приложения и дать согласие администратора для добавленных вами разрешений. Если вам нужно вызвать MS Graph API на создать / удалить Microsoft Teams, предоставьте своему приложению разрешение Directory.ReadWrite.All.

enter image description here

0
Carl Zhao 22 Сен 2020 в 06:07