Spesso è necessario accedere a SharePoint Online da applicazioni esterne, ad esempio una Azure App Function scritta in C# o una console application.
E' possibile concedere l'accesso tramite gli Add-in Permissions di SharePoint (chiamati anche apps for SharePoint). Si tratta di un un metodo sicuro per garantire l'accesso a delle risorse SharePoint limitando l'ambito (scope).
Questo sistema per garantire l'accesso alle risorse funziona con SharePoint Online, SharePoint 2013 e SharePoint 2016

Registrare un ADD-In

Non esiste un link, nell'interfaccia SharePoint, per raggiungere la pagina di registrazione, va composto aggiungendo /_layouts/15/appregnew.aspx al sito corrente', ad esempio https://sgart.sharepoint.local/event...regnew.aspx.
Creazione App-onlyCreazione App-only
Devi premere i pulsanti Generate per creare il Client Id e il Client Secret.
I parametri App Domain e Redirect URI sono ininfluenti impostarli, rispettivamente, a localhost e https://localhost .
Attenzione, prima di salvare, copia i valori di Client Id e Client Secret che serviranno successivamente
Conferma creazioneConferma creazione

Garantire l'accesso

Il passo successivo è garantire un accesso alla risorsa che ci interessa che può essere a livello di sitecollection, web, list e tenant.
Oltre al tipo di permesso da concedere: Read, Write, Manage e FullControl.

Questo si fa dalla pagina /_layouts/15/AppInv.aspx nello stesso sito del passo precedente.

Per procedere copia il Client Id nel campo App Id e premi Lookup, questo valorizzerà i campi Title, App Domains e Redirect URL:
Garantire l'accessoGarantire l'accesso
In questo caso sto garantendo un accesso a livello di lista (scope).
Quello che determina lo scope, è la stringa contenuta nel campo Permission Request XML:
XML
<AppPermissionRequests AllowAppOnlyPolicy="true"><AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web/list" Right="FullControl"/></AppPermissionRequests>
in questo esempio lo scope è impostato a livello di lista identificato dalla costante stringa http://sharepoint/content/sitecollection/web/list .
va sempre aggiunto l'attributo AllowAppOnlyPolicy="true", il permesso dovrà essere approvato da un site collection administrator

Per procedere al passo successivo, premi Create.

Trust

Dato che la richiesta di accesso è a livello di lista, la schermata successiva chiede di scegliere a quale lista dare accesso:
Garantire l'accesso alla listaGarantire l'accesso alla lista
che va confermata con il pulsante Trust it.
Per dare le grant bisogna essere site collection administrator.

Verifica

Posso verificare le app create andando in Site settings / Site collection app permissions (scope site collection) oppure Site settings / Site app permissions (scope web), dipende dalla versione,, che corrisponde alla url /_layouts/15/appprincipals.aspx (in questo caso la url è riferita alla site collection)
Site settings / Site collection app permissionsSite settings / Site collection app permissions
che mostra questo elenco
Elenco app permissionsElenco app permissions
Nell'elenco compaiono solo le app a cui sono state concesse delle autorizzazioni, ovvero il completamento dell pagina /_layouts/15/AppInv.aspx

Valori arributi

I valori possibili per l'attributo Scope specificate nell'XML precedente:
XML
<AppPermissionRequests AllowAppOnlyPolicy="true"><AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web/list" Right="FullControl" /></AppPermissionRequests>
sono:mentre i valori possibili per l'attributo Right sono:
  • Read: solo lettura
  • Write: lettura e scrittura
  • Manage
  • FullControl
Attenzione è molto importante che sia presente l'attributo AllowAppOnlyPolicy="true". Il permesso dovrà essere approvato da un site collection administrator.

Your tenant administrator has to approve this app

Se usate le permission a livello di tenant
XML
<AppPermissionRequests AllowAppOnlyPolicy="true"><AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" /></AppPermissionRequests>
e compare questo errore
Your tenant administrator has to approve this app.
bisogna modificare la url in questo modo puntando all'admin del tenant ([tenantname]-admin):
Text
https://[tenantname]-admin.sharepoint.com/_layouts/15/appinv.aspx
e confermare con Trust it

Per un esempio di utilizzo in C# vedi Accedere a SharePoint Online tramite Add-in permissions in .NET 4.7.2.

Possibili errori

Se compare questo messaggio
The element 'AppPermissionRequests' in namespace 'http://schemas.microsoft.com/sharepo...app/manifest ' cannot contain text. List of possible elements expected: 'AppPermissionRequest' in namespace 'http://schemas.microsoft.com/sharepo...app/manifest '.
eliminare eventuali spazi nell'XML del campo Permission Request XML.

Così va bene
XML
<AppPermissionRequests AllowAppOnlyPolicy="true"><AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="Write" /></AppPermissionRequests>
così è sbagliato
XML
<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="Write" />
</AppPermissionRequests>


Vedi anche Granting access using SharePoint App-Only, Add-in permissions in SharePoint e Add-in authorization policy types in SharePoint.
Potrebbe interessarti anche: