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 d’apprentissage, les fichiers seront dans le répertoire racine OneDrive Entreprise de l’utilisateur. Vous souhaitez peut-être y déposer un ou deux fichiers pour commencer. Vous pouvez accéder à votre instance de OneDrive Entreprise en accédant à https://www.office.com/, connexion, et en sélectionnant l’icône OneDrive.

Capture d'écran indiquant la liste Fichier.

Choisir les autorisations demandées par votre application

Toutes les données exposées par Microsoft Graph sont sécurisées. 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 d’un utilisateur, votre application doit avoir l’autorisation Calendars.Read. Pour lire les fichiers d’un utilisateur, votre application a besoin de 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 utilisateurs doivent lui accorder plusieurs autorisations d’accès à ces informations. Dans votre application, ne demandez que les autorisations dont vous avez besoin. Dans ce module, votre application demande l’autorisation de lire vos fichiers initialement et demande uniquement une autorisation de lecture/écriture lorsque vous essayez de charger un fichier. Ce modèle est appelé consentement dynamique. Il s’agit des autorisations de requête recommandées. Avec le consentement dynamique, les utilisateurs contrôlent les données qu’ils partagent avec les applications qu’ils utilisent, ce qui réduit les risques en matière de sécurité.

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 les étendues. Lorsque votre application utilise la bibliothèque d’authentification Microsoft pour obtenir le jeton d’accès, elle doit inclure une liste d’étendues dans la demande à l’ID Microsoft Entra. Chaque opération dans Microsoft Graph possède sa propre liste d’étendues rangée des moins aux plus privilégiés. Elles fonctionnent toutes. Choisissez donc les étendues les moins privilégiés qui fonctionnent au sein des opérations utilisées dans votre application.

L’exemple d’application stocke la demande de la bibliothèque d’authentification Microsoft actuelle dans une variable globale appelée msalRequest. Dans un premier temps, il contient un tableau vide d’étendues.

const msalRequest = { scopes: [] };

Voici la fonction d’aide utilisée par l’exemple d’application pour ajouter d’autres étendues à la demande.

function ensureScope (scope) {
  if (!msalRequest.scopes.some((s) => s.toLowerCase() === scope.toLowerCase())) {
    msalRequest.scopes.push(scope);
  }
}

L’idée est que l’application demande des autorisations quand elle en a besoin. Par exemple, voici le code qui vous aide à télécharger une liste de fichiers à partir du dossier racine OneDrive Entreprise d’un utilisateur.

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);
  }
}

L'appel à ensureScope() garantit que l'autorisation files.read est incluse dans le jeton d'accès qui sera utilisée pour appeler Microsoft Graph.

Le Kit de développement logiciel (SDK) Microsoft Graph se charge d’appeler MSAL à l’aide de l’objet msalRequest et procède ainsi pour chaque appel Graph. Cette activité peut sembler inutile, mais ce n’est pas le cas. La bibliothèque d’authentification Microsoft réutilise automatiquement le même jeton d’accès jusqu’à ’expiration de l’ancien ou la modification des étendues d’autorisations. En haut de graph.js s’affiche le code dans lequel cette instruction est définie.

const authProvider = {
  getAccessToken: async () => {
    return await getToken();
  }
};
const graphClient = MicrosoftGraph.Client.initWithMiddleware({ authProvider });

Tout d’abord, le code déclare un fournisseur authProvider, qui est un objet JSON contenant la fonction getAccessToken(). Cette fonction appelle getToken(), qui est une fonction du fichier auth.js qui appelle Bibliothèque d’authentification de Microsoft. Si vous le souhaitez, vous pouvez la consulter. L’objet du fournisseur authProvider est transmis au Kit de développement logiciel (SDK) Microsoft, qui appelle getAccessToken() en cas de besoin; pour en dispenser votre code.

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

Pour obtenir cette liste de fichiers, utilisez la ressource /me/drive/root/children. Il est plus facile d'obtenir les fichiers dans le dossier racine du répertoire OneDrive de l'utilisateur actuel car Microsoft Graph fournit des raccourcis tels que /me et /root. Par exemple, pour énumérer les fichiers du dossier Documents d'un autre utilisateur, vous devez rechercher l'ID utilisateur de l'utilisateur et l'ID élément de son dossier /Documents, puis accéder à /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 services.

Cette demande d’obtention est exprimée dans le Kit de développement logiciel (SDK) Microsoft Graph comme suit :

const response = await graphClient
  .api('/me/drive/root/children')
  .get();

Vous pouvez rendre l’appel plus efficace en spécifiant les colonnes de données nécessaires. Cette tâche est gérée à l’aide du paramètre de chaîne $select= query dans REST (sur la base de la norme OData). Le Kit de développement logiciel (SDK) facilite les choses en fournissant une fonction select(). Notez que les fonctions peuvent être enchaînée pour faciliter la lecture de la demande.

const response = await graphClient
    .api('/me/drive/root/children')
    .select('id,name,folder,package')
    .get();

Étapes suivantes

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