API Sharepoint (graph) для доступа к списку файлов OneDrive — ошибка 403/404

#sharepoint #onedrive

#sharepoint #onedrive

Вопрос:

Используя Postman в Windows с учетной записью, отличной от учетной записи пользователя onedrive, к которой я пытаюсь получить доступ, у нас есть список личных файлов пользователей «Мои файлы», отображаемых в Sharepoint для пользователей OneDrive по URL:

 https://xxxxxxxxxuk-my.sharepoint.com/personal/rob_xxxxxxxxxlimited_com/_layouts/15/onedrive.aspx
 

Я зарегистрировал надстройку здесь

 https://xxxxxxxxxuk-my.sharepoint.com/personal/rob_xxxxxxxxxlimited_com/_layouts/15/appregnew.aspx
 

Я сгенерировал идентификатор клиента, секрет, домен приложения = localhost, URL перенаправления = https://localhost

Я предоставил разрешения с помощью appinv.aspx в том же месте, нажал «Доверять этому»:

Я получил идентификатор пользователя и ресурс, перейдя в client.svc. Я могу получить access_token со всей этой информацией без проблем:

 grant_type  client_credentials

client_id   xxxxxxx-dbce-4a7e-bfd4-b7954546d4f8@xxxxxxx-f51f-4360-8e47-8ac7c82aecf7

 client_secret  xxxxxxx9SDjt6ELYGS4PP5NFLWxCnAWDSvxiH78fzDE=

resource    00000003-0000-0ff1-ce00-000000000000/xxxxxxxxuk-my.sharepoint.com@xxxxxxx-f51f-4360-8e47-8ac7c82aecf7
 

Возвращенный токен доступа, похоже, работает — изначально мы получали тип токена не разрешен, но мы запускаем это в powershell, и бог избавил от этой ошибки:
set-spotenant -DisableCustomAppAuthentication $ false

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

 https://xxxxxxxxxuk-my.sharepoint.com/personal/rob_xxxxxxxxxlimited_com/_layouts/15/_api/web/lists/getbytitle('My files')/items
 

Это возвращает значение 404. Я использую авторизацию: Bearer eyJ …, как было получено на предыдущих шагах, и принимаю application / json; odata = подробные заголовки.

тот же 404 для

 https://xxxxxxxxxuk-my.sharepoint.com/personal/rob_xxxxxxxxxlimited_com/_layouts/15/_api/web?$select=Title
 

Кто-нибудь может помочь с тем, почему я это получаю? Есть ли более простой запрос API, который больше похож на «привет, мир» для этой папки?

Эти URL-адреса разные, я получаю 403, у вас нет разрешения:

 https://xxxxxxxxxuk-my.sharepoint.com/_api/web/lists/getbytitle('My files')/items?$select=Title
https://xxxxxxxxxuk-my.sharepoint.com/_api/web?$select=Title
 

Ответ №1:

При использовании потока учетных данных может потребоваться предоставить приложению разрешение для зарегистрированного приложения:

  1. Зарегистрировать приложение

введите описание изображения здесь

  1. Предоставить разрешения (_layouts/15/appinv.aspx)
     <AppPermissionRequests AllowAppOnlyPolicy="true">
        <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="FullControl" />
    </AppPermissionRequests>
     
  2. Приобрести токен

введите описание изображения здесь

  1. Отправить запрос Api:

введите описание изображения здесь

Больше ссылок:

BR

Комментарии:

1. Спасибо. Здесь много деталей, которые выглядят так, как будто мы пытаемся сделать это правильно, но я тщательно проверю ваши. Очень удобно указать окончательный URL-адрес «hello world» в виде [sharepoint]/_api/web/lists. В настоящее время я провожу некоторое расследование с помощью powerscript, чтобы выяснить, связано ли это с учетной записью пользователя.