Отображение файлов пользователей
Прежде чем пользователь сможет скачать файл, необходимо отобразить список доступных файлов. В этом модуле обучения файлы будут находиться в корневом каталоге OneDrive для бизнеса пользователя. Вам стоит для начала перенести туда один или два файла. Для получения доступа к экземпляру OneDrive для бизнеса перейдите на страницу https://www.office.com/, выполните вход и щелкните значок OneDrive.
Выбор разрешений, необходимых вашему приложению
Все данные, предоставляемые посредством Microsoft Graph, защищены. Вашему приложению должны быть предоставлены правильные разрешения для доступа к данным. Необходимые разрешения зависят от типа сведений, к которым приложение должно получить доступ. Например, для доступа к календарю пользователя у вашего приложения должно быть разрешение Calendars.Read
. Для чтения файлов пользователя вашему приложению требуется разрешение Files.Read
. Позже, когда придет время отправить файлы, вашему приложению потребуется разрешение Files.ReadWrite
. Точный список разрешений, необходимых для каждой операции, доступен в справочнике по API Microsoft Graph.
Если приложение загружает различные типы данных, пользователи должны предоставить ему несколько разрешений, необходимых для доступа к этой информации. В своем приложении запрашивайте только необходимые разрешения. В этом модуле ваше приложение изначально запрашивает разрешение на чтение файлов и запрашивает разрешение на чтение и запись только при попытке отправить файл. Этот шаблон называется динамическим согласием. Это рекомендуемый способ запроса разрешений. При помощи динамического согласия пользователи управляют данными, которыми они делятся с используемыми приложениями, что минимизирует угрозы безопасности.
Указание необходимых разрешений
Список разрешений, предоставленных вашему приложению, включается прямо в маркер доступа. В стандарте OAuth они называются областями. Когда приложение использует библиотеку проверки подлинности Майкрософт для получения маркера доступа, оно должно включить список областей в запрос к идентификатору Microsoft Entra. Каждая операция в Microsoft Graph содержит собственный список областей, упорядоченный по возрастанию привилегий. Подойдет любая из них, поэтому выбирайте области с наименьшими привилегиями, которые будут работать в операциях, используемых в вашем приложении.
Пример приложения сохраняет текущий запрос библиотеки проверки подлинности Майкрософт в глобальной переменной msalRequest
. Изначально она содержит пустой массив областей.
const msalRequest = { scopes: [] };
Ниже представлена вспомогательная функция, используемая примером приложения для добавления дополнительных областей в запрос.
function ensureScope (scope) {
if (!msalRequest.scopes.some((s) => s.toLowerCase() === scope.toLowerCase())) {
msalRequest.scopes.push(scope);
}
}
Идея заключается в том, что приложение запрашивает разрешения, когда они нужны. Например, вот код для скачивания списка файлов из корневой папки OneDrive для бизнеса пользователя.
async function getFiles() {
ensureScope('files.read');
try {
const response = await graphClient
.api('/me/drive/root/children')
.select('id,name,folder,package')
.get();
return response.value;
} catch (error) {
console.error(error);
}
}
Вызов ensureScope()
гарантирует, что разрешение files.read включено в маркер доступа, который будет использоваться для вызова Microsoft Graph.
SDK Microsoft Graph обеспечивает вызов библиотеки проверки подлинности Майкрософт с помощью объекта msalRequest
и делает это для каждого вызова Microsoft Graph. Это действие может показаться бесполезным, однако это не так. Библиотека проверки подлинности Майкрософт автоматически повторно использует тот же маркер доступа, пока не истечет срок действия старого маркера или не изменится область разрешений. В верхней части graph.js вы увидите код, в котором настроена эта инструкция.
const authProvider = {
getAccessToken: async () => {
return await getToken();
}
};
const graphClient = MicrosoftGraph.Client.initWithMiddleware({ authProvider });
Во-первых, код объявляет authProvider
, являющегося объектом JSON, который содержит функцию getAccessToken()
. Эта функция вызывает getToken()
, что является функцией в файле auth.js, которая вызывает библиотеку проверки подлинности Майкрософт. Вы можете проверить это, если хотите. Объект authProvider
передается в пакет SDK Microsoft, который при необходимости вызывает getAccessToken()
, чтобы это не приходилось выполнять вашему коду.
Извлечение файлов из корневого каталога OneDrive пользователя с помощью Microsoft Graph
Чтобы получить этот список файлов, используйте ресурс /me/drive/root/children
. Проще получить файлы в корневой папке корневого каталога OneDrive текущего пользователя, так как Microsoft Graph предоставляет такие ярлыки, как /me
и /root
. Например, для перечисления файлов из папки "Документы" другого пользователя потребуется найти ИД пользователя и ИД элемента его папки "/Документы", а затем получить доступ к /users/{user-id}/drive/items/{item-id}/children
.
Совет
Microsoft Graph предоставляет доступ к файлам из OneDrive, OneDrive для бизнеса и SharePoint Online. Microsoft Teams и другие службы Microsoft 365 хранят файлы в OneDrive для бизнеса и SharePoint Online. Операции с файлами одинаковы, но ресурсы (URL-адреса) немного отличаются для каждой из этих служб.
Этот запрос GET выражается в SDK Microsoft Graph следующим образом.
const response = await graphClient
.api('/me/drive/root/children')
.get();
Вы можете сделать вызов более эффективным, указав нужные столбцы данных. Эта задача обрабатывается с помощью строкового параметра $select= query
в REST (на основе стандарта OData). SDK упрощает это действие путем предоставления функции select()
. Обратите внимание, что функции можно сцепить, чтобы упростить чтение запроса.
const response = await graphClient
.api('/me/drive/root/children')
.select('id,name,folder,package')
.get();
Дальнейшие действия
Давайте рассмотрим на практике все изученное вами и расширим возможности вашего приложения для отображения списка файлов из корневой папки OneDrive для бизнеса пользователя.