Я уже как-то бью головой. Я хочу разработать веб-API, который будет использоваться в моем приложении Angular. Назначение API - создание / удаление Microsoft Teams с помощью Graph API.
У меня есть лазурное приложение с соответствующим разрешением. и ниже мой код, который продолжает давать мне ошибку 403.
Кто-нибудь может мне помочь? Кроме того, нужно ли мне применить разрешение к указанному ниже параметру для доступа к API-интерфейсу Grpah без взаимодействия с пользователем (как во всплывающем окне входа)
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();
}
}
}
1 ответ
Да, если вам не нужно взаимодействие с пользователем, вам просто нужно предоставить разрешения приложения для вашего приложения и дать согласие администратора для добавленных вами разрешений. Если вам нужно вызвать MS Graph API на создать / удалить Microsoft Teams, предоставьте своему приложению разрешение Directory.ReadWrite.All
.
Похожие вопросы
Новые вопросы
azure
Microsoft Azure - это платформа для облачных вычислений «Платформа как услуга» и «Инфраструктура как услуга». Используйте этот тег для вопросов по программированию, касающихся Azure. Общая справка по серверу может быть получена в разделе «Суперпользователь» или «Ошибка сервера».