Anzeigen von Benutzerdateien

Abgeschlossen

Bevor ein Benutzer eine Datei herunterladen kann, muss eine Liste der verfügbaren Dateien angezeigt werden. In diesem Modul befinden sich die Dateien im Stammverzeichnis von OneDrive for Business des Benutzers. Sie sollten dort ein paar Dateien ablegen, bevor Sie beginnen. Sie können auf Ihr 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 werden gesichert, und Ihre App muss über die erforderlichen 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 Berechtigung Files.Read. Wenn es später an der Zeit ist, Dateien hochzuladen, benötigt Ihre App die Berechtigung Files.ReadWrite. Die vollständige Liste der für die einzelnen Vorgänge erforderlichen Berechtigungen finden Sie in der Microsoft Graph-API-Referenz.

Wenn Ihre App unterschiedliche Datentypen lädt, müssen Benutzer der App mehrere Berechtigungen erteilen, die für den Zugriff auf diese Informationen erforderlich sind. Es wird empfohlen, dass Sie in Ihrer App nur die Berechtigungen anfordern, die Sie benötigen.

Festlegen der erforderlichen Berechtigungen

Die Liste der gewährten Berechtigungen Ihrer App wird direkt im Zugriffstoken integriert. Der OAuth-Standard nennt sie "Bereiche". Wenn Ihre Anwendung MSAL zum Abrufen des Zugriffstokens verwendet, muss sie eine Liste von Bereichen in der Anforderung an die Microsoft Entra-ID enthalten. Jeder Vorgang in Microsoft Graph besitzt seine eigene Liste von Bereichen. Wenn in Ihrem Zugriffstoken eine solche fehlt, wird die Anforderung abgelehnt.

Wie Sie zuvor gesehen haben, speichert die Beispielanwendung die erforderlichen Berechtigungen in der Datei appsettings.json in einer Scopes-Eigenschaft.

"Scopes": "user.read presence.read mailboxsettings.read files.readwrite"

Der Scopes-Eigenschaftswert wird von der ASP.NET Core-Middleware der App verwendet, die das Abrufen eines Zugriffstokens verarbeitet, nachdem sich der Benutzer erfolgreich angemeldet hat.

Middleware: Microsoft Identity Platform und Microsoft Graph

ASP.NET Core unterstützt Middleware, die zur Authentifizierung und Autorisierung von Benutzern verwendet werden kann. Es kann auch zum Abrufen eines Token genutzt werden, das verwendet werden kann, um Microsoft Graph aufzurufen, ein Microsoft Graph-SDK-Objekt namens GraphServiceClient in die Anwendung zu injizieren, einen Tokencache zu erstellen und vieles mehr. Die Middleware ist in Startup.cs konfiguriert und übernimmt die folgenden Aufgaben.

  1. Abrufen der in der Scopes-Eigenschaft definierten erforderlichen Berechtigungen aus appsettings.json.
  2. Hinzufügen von Support für die OpenId-Authentifizierung.
  3. Angeben, dass es sich bei der Anwendung um eine Microsoft Identity Platform-Web-App handelt, die einen Authentifizierungscodefluss erfordert.
  4. Hinzufügen der Möglichkeit, Microsoft Graph-APIs mit bestimmten Berechtigungen aufzurufen.
  5. Aktivieren der Abhängigkeitsinjektion für GraphServiceClient (ein vom Microsoft Graph-SDK bereitgestelltes Objekt, das für Microsoft Graph-Aufrufe verwendet wird).
  6. Hinzufügen eines Speichertokencache.
  7. Einen authentifizierten Benutzer für den Zugriff auf die App fordern.
  8. Aktivieren der Unterstützung für Razor Pages.
  9. Hinzufügen von Microsoft Identity-UI-Seiten, die Unterstützung für Benutzeranmeldung und -abmeldung bieten.

Sie können jeden dieser Schritte in folgendem Code in der ConfigureServices()-Methode von Startup.cs definiert sehen.

// 1. Retrieve required permissions from appsettings
string[] initialScopes =
Configuration.GetValue<string>("DownstreamApi:Scopes")?.Split(' ');


services
  // 2. Add support for OpenId authentication
  .AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)

  // 3. Microsoft identity platform web app that requires an auth code flow
  .AddMicrosoftIdentityWebApp(Configuration)

  // 4. Add ability to call Microsoft Graph APIs with specific permissions
  .EnableTokenAcquisitionToCallDownstreamApi(initialScopes)

  // 5. Enable dependency injection for GraphServiceClient
  .AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))

  // 6. Add in-memory token cache
  .AddInMemoryTokenCaches();


// 7. Require an authenticated user
services.AddControllersWithViews(options =>
{
  var policy = new AuthorizationPolicyBuilder()
      .RequireAuthenticatedUser()
      .Build();
  options.Filters.Add(new AuthorizeFilter(policy));
});

services
  // 8. Add Razor Pages support
  .AddRazorPages()

  // 9. Add Microsoft Identity UI pages that provide user
  // sign-in and sign-out support
  .AddMicrosoftIdentityUI();

Abrufen der Dateien im OneDrive-Stammverzeichnis des Benutzers mithilfe von Microsoft Graph

Nachdem die erforderliche Middleware konfiguriert ist, übernimmt die Anwendung automatisch die Anmeldung des Benutzers und das Abrufen des Zugriffstokens. Das Zugriffstoken kann dann zum Abrufen der Dateien eines Benutzers verwendet werden, da es die erforderlichen Berechtigungen enthalten wird. Sehen wir uns an, wie dieser Prozess funktioniert.

Um die Dateien eines Benutzers abzurufen, verwenden Sie die /me/drive/root/children-Ressource. Es ist ein bisschen einfacher, Dateien aus dem Stammordner aus dem OneDrive des aktuellen Benutzers abzurufen, weil Microsoft Graph Verknüpfungen wie beispielsweise /me und /root zur Verfügung stellt.

Um Dateien im Ordner Dokumente eines anderen Benutzers aufzulisten, würden Sie die Benutzer-ID des Benutzers und die Element-ID seines Ordners Dokumente benötigen, wie nachstehend gezeigt:

/users/{user-id}/drive/items/{item-id}/children

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 Dateioperationen sind identisch, aber die Ressourcen (URLs) sind bei jeder dieser Vorgänge ein wenig unterschiedlich.

Zum Abrufen der Dateien des angemeldeten Benutzers kann der folgende Code verwendet werden:

var response = await _graphServiceClient.Me.Drive.Root.Children
    .Request()
    .GetAsync();

Sie können den Aufruf effizienter gestalten, indem Sie die benötigten spezifischen Dateneigenschaften angeben. Das Definieren der Eigenschaften erfolgt mithilfe der Select-Methode. Beachten Sie, dass die Methoden verkettet werden können, um das Lesen der Anforderung zu vereinfachen.

var response = await _graphServiceClient.Me.Drive.Root.Children
    .Request()
    .Select(file => new
    {
        file.Id,
        file.Name,
        file.Folder,
        file.Package
    })
    .GetAsync();

Der folgende Code kann verwendet werden, um Dateien für einen anderen Benutzer abzurufen, vorausgesetzt, die richtigen Sicherheitsberechtigungen sind verfügbar:

var response = await _graphServiceClient
  .Users[userId]
  .Drive
  .Items[itemId]
  .Children
  .Request()
  .Select(file => new
  {
    file.Id,
    file.Name,
    file.Folder,
    file.Package
  })
  .GetAsync();

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 Stammordner des Benutzers in OneDrive for Business anzuzeigen.