Microsoft Graph не может перечислить файлы каталога

При попытке перечислить элементы каталога для «меня» в графике Microsoft я получаю 400 Bad Request со следующей ошибкой: «Отсутствуют необходимые утверждения пользователя».

Действия по воспроизведению:

  1. Создайте приложение с помощью инструмента регистрации приложений, предоставьте разрешение Files.Read
  2. Используйте создание идентификатора клиента и секрета клиента, чтобы получить токен (следуя их руководству ) URL:

    curl -X POST -H "Cache-Control: no-cache" -H "Content-Type: application/x-www-form-urlencoded" -d 'grant_type=client_credentials&client_id=<client-id>&client_secret=<client-secret>=&resource=https://graph.microsoft.com' "https://login.microsoftonline.com/<my-tenant-id>/oauth2/token"

  3. Используйте созданный <Access-Token>, чтобы сделать запрос на перечисление корневого каталога, например (cURL):

    curl -X GET -H "Authorization: Bearer <Access-Token>" -H "Cache-Control: no-cache" "https://graph.microsoft.com/v1.0/me/drive/root/children"

Получить ответ:

400 Bad Request  
{
  "error": {
    "code": "BadRequest",
    "message": "Missing necessary user claims.",
    "innerError": {
      "request-id": "36c384f4-1810-4d96-ad69-d69a67d11ece",
      "date": "2016-05-31T14:39:05"
    }
  }
}

Любая помощь будет принята с благодарностью


person Nadav    schedule 31.05.2016    source источник


Ответы (1)


В вашем примере вы только аутентифицируете приложение (известное как «аутентификация только для приложения» или, в отношении потока OAuth 2.0, как поток «Предоставление учетных данных клиента»). Однако в вашем запросе конкретно упоминается пользователь (.../me/...), то есть вы.

Самый распространенный (и самый полный) способ аутентификации и авторизации пользователя — это вызвать поток предоставления кода авторизации для получения маркера доступа, который предназначен для как приложения, так и пользователя. Маркер доступа, полученный в конце этого потока, будет включать утверждения о вошедшем в систему пользователе и позволит Microsoft Graph узнать, кого вы имеете в виду под словом «я». Из документов:

Чтобы ваше приложение было авторизовано, вы должны сначала аутентифицировать пользователя. Вы делаете это, перенаправляя пользователя на конечную точку авторизации Azure Active Directory (Azure AD) вместе с информацией о вашем приложении, чтобы войти в свою учетную запись Office 365. Как только пользователь войдет в систему и согласится с разрешениями, запрошенными вашим приложением (если пользователь еще этого не сделал), ваше приложение получит код авторизации, необходимый для получения токена доступа OAuth.

Еще немного чтения:

person Philippe Signoret    schedule 31.05.2016