Я работаю с Microsoft Graph и создал приложение, которое читает почту от определенного пользователя.
Однако после получения токена доступа и попытки прочитать почтовые папки я получаю 401 Несанкционированный ответ. Подробное сообщение:
Маркер не содержит разрешений, или разрешения не могут быть поняты .
Это кажется довольно ясным сообщением, но, к сожалению, я не могу найти решение.
Это то, что я сделал до сих пор:
Разрешения:
- Напишите приведенный ниже код для получения токена доступа:
// client_secret retrieved from secure storage (e.g. Key Vault)
string tenant_id = "xxxx.onmicrosoft.com";
ConfidentialClientApplication client = new ConfidentialClientApplication(
"..",
$"https://login.microsoftonline.com/{tenant_id}/",
"https://dummy.example.com", // Not used, can be any valid URI
new ClientCredential(".."),
null, // Not used for pure client credentials
new TokenCache());
string[] scopes = new string[] { "https://graph.microsoft.com/.default" };
AuthenticationResult result = client.AcquireTokenForClientAsync(scopes).Result;
string token = result.AccessToken;
Пока все хорошо. Я получаю токен.
Теперь я хочу прочитать почтовые папки:
url = "https://graph.microsoft.com/v1.0/users/{username}/mailFolders";
handler = (HttpWebRequest)WebRequest.Create(url);
handler.Method = "GET";
handler.ContentType = "application/json";
handler.Headers.Add("Authorization", "Bearer " + token);
response = (HttpWebResponse)handler.GetResponse();
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
returnValue = sr.ReadToEnd();
}
На этот раз я получаю сообщение 401 с подробной информацией:
Маркер не содержит разрешений, или разрешения не могут быть поняты.
Я искал в Интернете, но не могу найти ответ, почему мой токен не имеет разрешений.
Спасибо за ваше время!
обновление 1
Если я использую Graph Explorer для чтения почтовых папок, то он работает нормально. Более того: если я получу идентификатор токена из моего браузера и использую его во втором фрагменте кода, то получу и результат. Итак, проблема в том, что токен я получаю с первого шага.