Dopo aver creato un Add-in permissions può tornare utile verificare velocemente il funzionamento.

Per fa questo si possono usare i comandi pnp o una console app in C#, oppure usa questo script PowerShell

La prima cosa da fare è invocare la url https://accounts.accesscontrol.windows.net/ <tenantId>/tokens/OAuth/2 per richiedere il bearer token.
Questo token andrà passato nell'header in tutte le chiamate successive per ottenere l'autenticazione.

Quello che serve come parametri sono il: TenantID, TenantName, ClientID e ClientSecret.
PowerShell
# definire i parametri del tenant + client e client secret
$tenantId= "<tenant id>"
$tenantName= "<tenant name>"
$clientId = "<client id>"
$clientSecret = "<client secret>"

# neccessario per le chiamate alle api di SharePoint
$siteCollectionUrl= "sites/sito1"
poi va richiesto il bearer token facendo una chiamata in post a 'https://accounts.accesscontrol.windows.net
PowerShell
# ottenere il token di accesso (Bearer) tramite client e clientsecret
$LOGIN_ENDPOINT = "https://accounts.accesscontrol.windows.net/$tenantId/tokens/OAuth/2";
$SHAREPOINT_PRINCIPAL = "00000003-0000-0ff1-ce00-000000000000";
$headers = @{
	"Accept" = "application/json";
	"Content-Type" = "application/x-www-form-urlencoded"
}
# il client secret va ecodato UrlEncode
$body = "grant_type=client_credentials&client_id=$($clientId)@$($tenantId)" +
	"&client_secret=$([System.Net.WebUtility]::UrlEncode($clientSecret))" +
	"&resource=$($SHAREPOINT_PRINCIPAL)/$($tenantName).sharepoint.com@$($tenantId)"

$tokenResponse = Invoke-WebRequest -Method POST -Uri $LOGIN_ENDPOINT -Body $body -Headers $headers

# content trasformato in JSON
$tokenJson = $tokenResponse.Content | ConvertFrom-Json
# il token si trova in $tokenJson.access_token
Write-Host "Bearer $($tokenJson.access_token)"
nella variabile $tokenResponse c'è una risposta simile a questa e il token si trova nella proprietà Content (stringa JSON)
StatusCode        : 200
StatusDescription : OK
Content           : {"token_type":"Bearer","expires_in":"86399","not_before":"1606857774","expires_on":"1606944474","re
                    source":"00000003-0000-0ff1-ce00-000000000000/sgart.sharepoint.com@DCD5C3F2-5BC6-4009-9AD1-E26AE353CF64
                    dc...
RawContent        : HTTP/1.1 200 OK
                    Pragma: no-cache
                    Strict-Transport-Security: max-age=31536000; includeSubDomains
                    X-Content-Type-Options: nosniff
                    x-ms-request-id: 7922aa51-f5df-4637-a80a-9bf5ac213502
                    x-ms-ests-ser...
Forms             : {}
Headers           : {[Pragma, no-cache], [Strict-Transport-Security, max-age=31536000; includeSubDomains],
                    [X-Content-Type-Options, nosniff], [x-ms-request-id, 7922aa51-f5df-4637-a80a-9bf5ac213502]...}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 1416
la proprietà Content una volta convertita in JSON è simile a questa
PowerShell
token_type   : Bearer
expires_in   : 86399
not_before   : 1606858305
expires_on   : 1606945005
resource     : 00000003-0000-0ff1-ce00-000000000000/sgart.sharepoint.com@DCD5C3F2-5BC6-4009-9AD1-E26AE353CF64
access_token : eyJ0eXAiOiJKV ... NWlQ

Con il token, posso richiamare, in modo autenticato, le API di SharePoint (https://tenantName.sharepoint.com/ ), ad esempio per elencare tutte le liste presenti nel sito ( _api/web/lists )
PowerShell
# query per ottenere l'elenco delle liste presenti con il Bearer token passato nell'header
$apiUrl = "https://$($tenantName).sharepoint.com/$siteCollectionUrl/_api/web/lists"
Write-Host "Url: $apiUrl"

$headers = @{
	"Accept" = "application/json";
	"Content-Type" = "application/json";
	"Authorization" = "Bearer $($tokenJson.access_token)"
}
$responseQuery = Invoke-WebRequest -Method GET -Uri $apiUrl  -Headers $headers

$queryJson = $responseQuery.Content | ConvertFrom-Json
 
$queryJson.value | select id, title
Da notare che il bearer token viene passato nel parametro Authorization nell'header.
da un risultato simile a questo
Id                                   Title
--                                   -----
33078264-dd19-40b1-b8ab-7cb5e9b6eadc appdata
dd90b1da-fa6d-410d-84e4-f5862a5f1e47 appfiles
c123cad9-7259-4fb7-8132-88e76d242df5 Apps for SharePoint
...
0798b432-1580-4525-9feb-1055a4025ddd Documents
...

Oppure possono elencare tutti i files di una document library ( _api/web/GetFolderByServerRelativeUrl('/Shared Documents')/Files )
PowerShell
# query per ottenere l'elenco delle degli items di una lista con il Bearer token passato nell'header
#$apiUrl = "https://$($tenantName).sharepoint.com/$siteCollectionUrl/_api/web/lists/GetByTitle('Documents')/items"
$apiUrl = "https://$($tenantName).sharepoint.com/$siteCollectionUrl/_api/web/GetFolderByServerRelativeUrl('/$siteCollectionUrl/Shared Documents')/Files?`$expand=ListItemAllFields"
Write-Host "Url: $apiUrl"

$headers = @{
	"Accept" = "application/json";
	"Content-Type" = "application/json";
	"Authorization" = "Bearer $($tokenJson.access_token)"
}
$responseQuery = Invoke-WebRequest -Method GET -Uri $apiUrl  -Headers $headers

$queryJson.value | select @{Label="ID"; Expression={$_.ListItemAllFields.ID}}, Name, ServerRelativeUrl
da un risultato simile a questo
ID Name                           ServerRelativeUrl
-- ----                           -----------------
16 file13.txt                     /Shared Documents/file13.txt
21 Document11 (1).docx            /Shared Documents/Document11 (1).docx
24 rubrica (2).html               /Shared Documents/rubrica (2).html
...
Vedi anche Get to know the SharePoint REST service.
Potrebbe interessarti anche: