Anzeigen von Benutzerdateien
Bevor ein Benutzer eine Datei herunterladen kann, muss eine Liste der verfügbaren Dateien angezeigt werden. In diesem Lernmodul werden sich die Dateien im OneDrive for Business-Stammverzeichnis des Benutzers befinden. Möglicherweise möchten Sie eine oder zwei Dateien dort ablegen, bevor Sie beginnen. Sie können auf Ihre Instanz von OneDrive for Business zugreifen, indem Sie zu https://www.office.com/ navigieren, sich anmelden und das OneDrive-Symbol auswählen.
Entscheiden, welche Berechtigungen für Ihre App erforderlich sind
Alle von Microsoft Graph verfügbar gemachten Daten sind gesichert. Ihre App muss über die richtigen Berechtigungen verfügen, um darauf zugreifen zu können. Die erforderlichen Berechtigungen sind von der Art der Informationen abhängig, auf die Ihre App zugreifen muss. Um beispielsweise auf den Kalender des Benutzers zugreifen zu können, muss Ihre App über die Berechtigung Calendars.Read
verfügen. Zum Lesen der Dateien eines Benutzers benötigt Ihre App die Files.Read
-Berechtigung. Wenn es später an der Zeit ist, Dateien hochzuladen, benötigt Ihre App die Files.ReadWrite
-Berechtigung. Die genaue Liste der für jeden Vorgang erforderlichen Berechtigungen finden Sie in der API-Referenz von Microsoft Graph.
Wenn Ihre App unterschiedliche Datentypen lädt, müssen die Benutzer ihr mehrere Berechtigungen erteilen, die für den Zugriff auf diese Informationen erforderlich sind. Fordern Sie in Ihrer App nur die Berechtigungen an, die Sie benötigen. In diesem Modul wird Ihre App zunächst die Berechtigung zum Lesen Ihrer Dateien anfordern und die Berechtigung „Lesen/Schreiben“ nur anfordern, wenn Sie versuchen, eine Datei hochzuladen. Dieses Muster wird als dynamische Zustimmung bezeichnet und stellt die empfohlene Methode zum Anfordern von Berechtigungen dar. Mit dynamischer Zustimmung steuern Benutzer die Daten, die sie mit den von ihnen verwendeten Apps teilen, wodurch Sicherheitsrisiken minimiert werden.
Festlegen der erforderlichen Berechtigungen
Die Liste der gewährten Berechtigungen Ihrer App wird direkt im Zugriffstoken integriert. Im OAuth-Standard werden sie Bereiche (scopes) genannt. Wenn Ihre Anwendung die Microsoft-Authentifizierungsbibliothek verwendet, um das Zugriffstoken abzurufen, muss sie eine Liste von Bereichen in der Anforderung an die Microsoft Entra-ID enthalten. Jeder Vorgang in Microsoft Graph hat seine eigene Liste von Bereichen, die von den am wenigsten bis zu den am meisten privilegierten geordnet sind. Jeder von ihnen funktioniert, also wählen Sie die am wenigsten privilegierten Bereiche aus, die über alle in Ihrer Anwendung verwendeten Vorgänge hinweg funktionieren.
Die Beispielanwendung speichert die aktuelle Anforderung der Microsoft-Authentifizierungsbibliothek in einer globalen Variable mit Namen msalRequest
. Zunächst enthält sie ein leeres Array von Bereichen.
const msalRequest = { scopes: [] };
Hier ist die Hilfsfunktion, die von der Beispielanwendung verwendet wird, um der Anforderung weitere Bereiche hinzuzufügen.
function ensureScope (scope) {
if (!msalRequest.scopes.some((s) => s.toLowerCase() === scope.toLowerCase())) {
msalRequest.scopes.push(scope);
}
}
Die Idee dahinter ist, dass die Anwendung Berechtigungen anfordert, wenn sie diese benötigt. Hier finden Sie beispielsweise den Code zum Herunterladen einer Liste von Dateien aus dem OneDrive for Business-Stammverzeichnis eines Benutzers.
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);
}
}
Das Aufrufen von ensureScope()
stellt sicher, dass die files.read-Berechtigung im Zugriffstoken enthalten ist, das zum Aufrufen von Microsoft Graph verwendet wird.
Das Microsoft Graph-SDK kümmert sich um den Aufruf der Microsoft-Authentifizierungsbibliothek mithilfe des msalRequest
-Objekts, und es tut dies für jeden Microsoft Graph-Aufruf. Auch wenn diese Aktivität wie eine Verschwendung aussieht, sie ist es nicht. Die Microsoft-Authentifizierungsbibliothek verwendet automatisch dasselbe Zugriffstoken, bis das alte abläuft oder sich die Berechtigungsbereiche ändern. Oben in graph.js können Sie den Code sehen, in dem diese Anweisung eingerichtet ist.
const authProvider = {
getAccessToken: async () => {
return await getToken();
}
};
const graphClient = MicrosoftGraph.Client.initWithMiddleware({ authProvider });
Zuerst gibt der Code einen authProvider
an. Dabei handelt es sich um ein JSON-Objekt handelt, welches die Funktion getAccessToken()
enthält. Diese Funktion ruft getToken()
auf. Dies ist eine Funktion in der Datei auth.js, welche die Microsoft-Authentifizierungsbibliothek aufruft. Sie können dies ausprobieren, wenn sie wollen. Das authProvider
-Objekt wird an das Microsoft-SDK übergeben, welches getAccessToken()
bei Bedarf aufruft, sodass Ihr Code dies nicht tun muss.
Abrufen der Dateien im OneDrive-Stammverzeichnis des Benutzers mithilfe von Microsoft Graph
Um diese Liste der Dateien abzurufen, verwenden Sie die /me/drive/root/children
-Ressource. Es ist einfacher, Dateien aus dem Stammordner des OneDrive-Stammverzeichnisses des aktuellen Benutzers abzurufen, weil Microsoft Graph Verknüpfungen wie /me
und /root
zur Verfügung stellt. Um beispielsweise Dateien im Ordner „Dokumente“ eines anderen Benutzers aufzulisten, müssten Sie die Benutzer-ID des Benutzers und die Element-ID des Ordners „/Dokumente“ nachschlagen und dann auf /users/{user-id}/drive/items/{item-id}/children
zugreifen.
Tipp
Microsoft Graph bietet einen Zugriff auf Dateien in OneDrive, OneDrive for Business und SharePoint Online. Microsoft Teams und andere Microsoft 365-Dienste speichern Dateien in OneDrive for Business und SharePoint Online. Die Dateivorgänge sind identisch, aber die Ressourcen (URLs) sind bei jedem dieser Dienste ein wenig unterschiedlich.
Diese GET-Anforderung wird im Microsoft Graph-SDK wie folgt ausgedrückt:
const response = await graphClient
.api('/me/drive/root/children')
.get();
Sie können den Aufruf effizienter gestalten, indem Sie die Datenspalten angeben, die benötigt werden. Diese Aufgabe wird mithilfe des $select= query
-Zeichenfolgenparameters in REST (basierend auf dem OData-Standard) ausgeführt. Das SDK vereinfacht dies, indem es eine select()
-Funktion zur Verfügung stellt. Beachten Sie, dass die Funktionen verkettet werden können, damit die Anforderung einfacher zu lesen ist.
const response = await graphClient
.api('/me/drive/root/children')
.select('id,name,folder,package')
.get();
Nächste Schritte
Lassen Sie uns alles, was Sie gelernt haben, in die Praxis umsetzen und Ihre App erweitern, um eine Liste von Dateien im OneDrive for Business-Stammordner des Benutzers anzuzeigen.