Почему это «AccessDenied» при общении с Microsoft Graph API? - PullRequest
1 голос
/ 09 января 2020

Я не могу получить доступ к конечным точкам на графике Microsoft.

Я буду загружать файл на один диск пользователей, когда у меня настроена связь, но сейчас я просто пытаюсь получить список элементов в диск.

Это ответ, который я получаю от https://graph.microsoft.com/v1.0/drives/ {{drive_id}} / root / children

{
  "error": {
  "code": "AccessDenied",
  "message": "Either scp or roles claim need to be present in the token.",
  "innerError": {
  "request-id": "123",
    "date": "2020-01-09T11:43:20"
  }
 }
}

Я получил drive_id с помощью проводника графика в конечной точке https://graph.microsoft.com/v1.0/me/ вошедшего в систему пользователя.

Следует отметить, что я могу использовать эту конечную точку https://graph.microsoft.com/v1.0/subscriptions Так что я должен что-то делать правильно с токен доступа.

Я следовал этому руководству, чтобы получить токен доступа, используя поток учетных данных клиента.

и это код, который я использую для получения токена доступа

httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www- 
 form-urlencoded"));
            var req = new HttpRequestMessage(HttpMethod.Post, $"https://login.microsoftonline.com/<tenant>/oauth2/token");
            req.Content = new FormUrlEncodedContent(new Dictionary<string, string>
            {
                {"grant_type", "client_credentials"},
                {"client_id", "123"},
                {"client_secret", "123"},
                {"resource", "https://graph.microsoft.com"}
            });

Когда я декодирую JWT, я не вижу областей в токене, но если я правильно понимаю, заголовок должен получить области, разрешенные администратором.

Администратор уже предоставил моему приложению эти разрешения для графического обозревателя: (Хотя у меня нет разрешений для делегатов, это имеет значение?)

Filse.Read,
Files.ReadWriteAll,
Sites.ReadWtiteAll,
User.Read

Я использую эту коллекцию в почтальоне для тестирования.

Спасибо заранее за любые советы.

1 Ответ

1 голос
/ 09 января 2020

С марта c Ответ ЛаФлёра:

Первое, что нужно понять, это то, что вы не можете получать разрешения Application и Delegated в одном токене, это или / или сценарий. Тип получаемого вами сообщения полностью зависит от того, какой OAuth-грант вы использовали для запроса токена:

Код авторизации и неявный возврат Делегированные токены со свойством scp Клиентские учетные данные возвращают токены приложения со свойством role. Во-вторых, вы запросили области действия для двух разных API. Исходя из того, что вы выбрали, у вас не будет доступа к SharePoint через Microsoft Graph, потому что вы запрашивали доступ только к устаревшему API SharePoint. Что еще более важно, вы запросили только область делегированного User.Read для Graph, поэтому при использовании учетных данных клиента для получения токена этот токен не будет иметь никаких разрешений.

В порядке чтобы получить токен приложения для чтения сайтов SharePoint, вам потребуется Sites.Read.All Разрешение приложения Microsoft Graph * выбрано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...