Creare un'API REST per gestire le operazioni di lettura e visualizzazione con SharePoint Embedded

Completato

Le applicazioni SharePoint Embedded, come la maggior parte delle applicazioni che interagiscono con i database e i sistemi di archiviazione back-end, eseguono due tipi di operazioni: lettura/recupero di dati e file e archiviazione o eliminazione di file. In questa sezione si apprenderà come accedere ai contenitori incorporati di SharePoint usando le API REST di Microsoft Graph.

Panoramica dell'app personalizzata e del suo funzionamento con SharePoint Embedded, SharePoint Online e Microsoft Graph

Gli esercizi seguenti in questo modulo illustrano i passaggi per la creazione di un'app Web e un servizio Web in grado di gestire i contenitori incorporati di SharePoint ed eseguire operazioni CRUD con i documenti in questi contenitori.

Verranno ora esaminati i due componenti dell'applicazione che verranno compilati e i responsabili di ognuno di essi.

Applicazione Web che implementa l'esperienza utente

L'interfaccia utente viene implementata usando React per creare un'applicazione a pagina singola. Questa applicazione può usare Microsoft Graph per leggere e scrivere contenuti e documenti nei contenitori perché si tratta di operazioni che possono essere eseguite usando le autorizzazioni app+utente o delegate.

L'applicazione Web userà fluent UI React Controls (v9) e Microsoft Graph Toolkit (v3) per usare diversi componenti dell'interfaccia utente per semplificare la creazione dell'esperienza utente.

Non tutte le operazioni possono essere eseguite dall'applicazione React lato client perché richiedono autorizzazioni elevate che possono essere gestite solo sul lato server.

API lato server che gestisce operazioni con privilegi più elevati

Non tutte le operazioni del contenitore possono essere eseguite direttamente dall'applicazione React. Per questi scenari, tra cui la creazione, l'eliminazione e il recupero di un elenco dei contenitori incorporati di SharePoint, verrà creato un server API sul lato server

Per questo progetto è possibile usare un'applicazione Funzioni di Azure o un'app Web di Azure per ospitare un progetto API Web ASP.NET. Nel progetto verrà usato il server restify Node.js leggero.

Questa API riceverà richieste dalla spa React che includono il token di accesso dell'utente ricevuto al momento dell'accesso all'applicazione. Si useranno questo token di accesso e il flusso OBO per ottenere un token di accesso destinato a Microsoft Graph che è possibile usare per eseguire le operazioni del contenitore come utente.

Creazione di contenitori incorporati di SharePoint con Microsoft Graph

L'API sul lato server dovrà creare contenitori, tra le altre attività. Questa operazione verrà eseguita dall'API sul lato server usando il flusso On-Behalf-Of per ottenere un token di accesso destinato a Microsoft Graph.

Questa chiamata viene avviata per la prima volta dalla spa React che includerà il token di accesso dell'utente attualmente connesso.

Il server API creerà prima un'istanza di usando ConfidentialClientApplication Microsoft Authentication Library (MSAL). Per creare l'autenticazione con Microsoft Entra ID usando l'ID ConfidentialClientApplication client e il segreto client dell'app:

const msalConfig: MSAL.Configuration = {
  auth: {
    clientId: process.env['API_ENTRA_APP_CLIENT_ID']!,
    authority: process.env['API_ENTRA_APP_AUTHORITY']!,
    clientSecret: process.env['API_ENTRA_APP_CLIENT_SECRET']!
  }
};

const confidentialClient = new MSAL.ConfidentialClientApplication(msalConfig);

ConfidentialClientApplication Usare quindi per ottenere un token di accesso per conto dell'utente corrente scambiando il token di accesso fornito dall'accesso dell'utente con un token di accesso che può chiamare Microsoft Graph:

// get user's access token from the request submitted by the React SPA
const [bearer, token] = req.headers.authorization.split(' ');

// set that token to the assertion and the scopes to the permissions we
//    need in the access token to call Microsoft Graph
const graphTokenRequest = {
  oboAssertion: token,
  scopes: [
    Scopes.GRAPH_SITES_READ_ALL,
    Scopes.SPREPOSERVICES_FILESTORAGECONTAINER_SELECTED
  ]
};

// obtain the OBO token using the ConfidentialClientApplication object
const ccaOboResponse = await confidentialClient.acquireTokenOnBehalfOf(graphTokenRequest);
const oboGraphToken = ccaOboResponse!.accessToken;

Ora che si dispone del token OBO per Microsoft Graph, creare un provider di autenticazione e quindi un'istanza del client Microsoft Graph per semplificare le chiamate all'API REST di Microsoft Graph:

const authProvider = (callback: MSGraph.AuthProviderCallback) => {
  callback(null, graphTokenRequest);
};

const graphClient = MSGraph.Client.init({
  authProvider: authProvider,
  defaultVersion: 'beta'
});

Inviare infine una richiesta HTTP POST all'endpoint di https://graph.microsoft.com/{version}/storage/fileStorage/containers Microsoft Graph per creare un nuovo contenitore:

const containerRequestData = {
  displayName: 'New container name',
  description: 'New container description',
  containerTypeId: process.env["CONTAINER_TYPE_ID"]
};

const graphResponse = await graphClient.api(`storage/fileStorage/containers`)
                                       .post(containerRequestData);

Ottenere un elenco di contenitori incorporati di SharePoint con Microsoft Graph

L'altra attività comune che verrà eseguita consiste nel ottenere un elenco di tutti i contenitori. Questa richiesta ha gli stessi requisiti della creazione di un contenitore.

L'autenticazione e l'inizializzazione di un client Microsoft Graph sono identiche a quelle per la creazione di un contenitore. L'unica differenza è la richiesta inviata a Microsoft Graph. In questo caso. si eseguirà un'operazione HTTP GET allo stesso https://graph.microsoft.com/{version}/storage/fileStorage/containers endpoint:

const graphResponse = await graphClient.api(`storage/fileStorage/containers?$filter=containerTypeId eq ${process.env["CONTAINER_TYPE_ID"]}`).get();

Riepilogo

In questa sezione si è appreso come accedere ai contenitori incorporati di SharePoint usando le API REST di Microsoft Graph.