Afficher les fichiers des utilisateurs

Effectué

La listes des fichiers disponibles doit être affichée pour qu’un utilisateur puisse télécharger un fichier. Dans ce module, les fichiers seront dans la racine OneDrive Entreprise de l’utilisateur. Vous souhaitez peut-être y déposer un ou deux fichiers pour commencer. Vous pouvez accéder à votre OneDrive Entreprise en accédant à https://www.office.com, connexion, et en sélectionnant l’icône OneDrive.

Choisir les autorisations demandées par votre application

Toutes les données exposées par Microsoft Graph sont sécurisées et votre application doit avoir les autorisations nécessaires pour y accéder. L’autorisation nécessaire dépend du type d’informations dont votre application a besoin pour l’accès. Par exemple, pour accéder au calendrier de l’utilisateur, votre application doit avoir l’autorisation Calendars.Read. Pour lire les fichiers d’un utilisateur, votre application doit avoir l’autorisation Files.Read. Plus tard, au moment du chargement des fichiers, votre application aura besoin de l’autorisation Files.ReadWrite. La liste exacte des autorisations requises pour chaque opération est disponible dans la référence de l’API Microsoft Graph.

Si votre application charge différents types de données, les personnes devront lui accorder plusieurs autorisations pour accéder à ces informations. Il est recommandé de demander dans votre application uniquement les autorisations dont vous avez besoin.

Spécifier les autorisations nécessaires

La liste des autorisations accordées à votre application se trouve dans le jeton d’accès. La norme OAuth les appelle « étendues ». Lorsque votre application utilise MSAL pour obtenir le jeton d’accès, elle doit inclure une liste d’étendues dans la requête à l’ID Microsoft Entra. Chaque opération dans Microsoft Graph possède sa propre liste d’étendues. Si votre jeton d’accès n’en a pas, la demande sera refusée.

L’exemple d’application stocke les autorisations requises dans le fichier appsettings.json dans une propriété Scopes comme vous l’avez vu précédemment.

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

La valeur de propriété Scopes est utilisée par l’intergiciel ASP.NET Core de l’application, qui gère la récupération d’un jeton d’accès une fois que l’utilisateur s’est correctement connecté.

Intergiciel : Plateforme d'identités Microsoft et Microsoft Graph

ASP.NET Core prend en charge les intergiciels qui peuvent être utilisés pour authentifier et autoriser les utilisateurs. Il peut également être utilisé pour récupérer un jeton qui peut être utilisé pour appeler Microsoft Graph, injecter un objet SDK Microsoft Graph nommé GraphServiceClient dans l’application, créer un cache de jetons et bien plus encore. L’intergiciel est configuré dans Startup.cs et gère les tâches suivantes.

  1. Récupérez les autorisations requises définies dans la propriété Scopes à partir de appsettings.json.
  2. Ajoutez la prise en charge de l’authentification OpenId.
  3. Spécifiez que l’application est une application web Plateforme d'identités Microsoft qui nécessite un flux de code d’authentification.
  4. Ajoutez la possibilité d’appeler des API Microsoft Graph avec des autorisations spécifiques.
  5. Activez l’injection de dépendances pour GraphServiceClient (objet fourni par le SDK Microsoft Graph utilisé pour effectuer des appels Microsoft Graph).
  6. Ajoutez un cache de jetons en mémoire.
  7. Exigez qu’un utilisateur authentifié accède à l’application.
  8. Activez la prise en charge de Razor Pages.
  9. Ajoutez des pages d’interface utilisateur Microsoft Identity qui fournissent la prise en charge de la connexion et de la déconnexion de l’utilisateur.

Vous pouvez voir chacune de ces étapes dans le code suivant défini dans la méthode ConfigureServices() de Startup.cs.

// 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();

Récupérer les fichiers dans le répertoire racine OneDrive de l’utilisateur à l’aide de Microsoft Graph

Une fois l’intergiciel requis configuré, l’application gère automatiquement la connexion de l’utilisateur et la récupération du jeton d’accès. Le jeton d’accès peut ensuite être utilisé pour récupérer les fichiers d’un utilisateur, car il contiendra les autorisations requises. Examinons le fonctionnement de ce processus.

Pour obtenir les fichiers d’un utilisateur, utilisez la ressource /me/drive/root/children. Il est plus facile d'obtenir les fichiers dans le dossier racine du OneDrive de l'utilisateur actuel car Microsoft Graph fournit des raccourcis tels que /me et /root.

Pour énumérer les fichiers dans le dossier Documents d’un autre utilisateur, vous avez besoin de l’ID utilisateur de l’utilisateur et de l’ID d’élément de son dossier Documents comme indiqué ci-après :

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

Conseil

Microsoft Graph fournit un accès aux fichiers stockés dans OneDrive, OneDrive Entreprise, et SharePoint Online. Microsoft Teams et d’autres services Microsoft 365 stockent des fichiers dans OneDrive Entreprise et SharePoint Online. Les opérations sur les fichiers sont identiques, mais les ressources (URLs) sont légèrement différentes pour chacune de ces opérations.

Pour récupérer les fichiers de l’utilisateur connecté, vous pouvez utiliser le code suivant :

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

Vous pouvez rendre l’appel plus efficace en spécifiant les propriétés de données spécifiques nécessaires. La définition des propriétés est gérée à l’aide de la méthode Select. Notez que les méthodes peuvent être enchaînées pour faciliter la lecture de la demande.

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

Le code suivant peut être utilisé pour récupérer des fichiers pour un autre utilisateur en supposant que les autorisations de sécurité adéquates sont disponibles :

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

Prochaines étapes

Passons à la phase pratique. Nous allons agrandir votre application pour afficher une liste de fichiers dans le dossier racine OneDrive Entreprise de l’utilisateur.