Tramite la console
Developer tools di
Chrome è possibile ricavare il
Bearer token di
SharePoint Online da usare
temporaneamente per fare delle chiamate alle
REST API fuori dal contesto del
Browser.
Session storage
SharePoint Online memorizza il
Bearer token nel
session storage, accessibile, da
Browser, tramite console
Developer tools (tasto F12 oppure CTRL+SHIFT+I).
La chiave ha un nome complesso, si tratta di un
JSON, che contiene la parola
author
Developer toolsDa notare che ci sono 2 chiavi con la parola author, va presa quella che contiene anche la parola scopes.
La
chiave corretta è simile a questa
{
"authority":"https://login.microsoftonline.com/b32d8140-...xxxx....-6237a532dca9/",
"clientId":"08e18876...xxx...950c1e598c",
"scopes":"https://sgart.sharepoint.com/Files.ReadWrite.All https://sgart.sharepoint.com/Sites.FullControl.All https://sgart.sharepoint.com/Sites.ReadWrite.All https://sgart.sharepoint.com/TermStore.ReadWrite.All https://sgart.sharepoint.com/.default",
"homeAccountIdentifier":"NjRhZDc5MjMtNz...xxx...jIzN2E1MzJkY2E5"
}
e il corrispondente
valore è simile a questo
{
"accessToken":"eyJ0...9YcWJIWkdldyJ9.eyJhdWQiO...iMS4wIn0.FwEVPRIh_Co6...s-CMt2Xf9g",
"idToken":"eyJ...ldyJ9.eyJhdWQi...4wIn0.sXbHw3J...",
"expiresIn":"1672438974",
"homeAccountIdentifier":"eyJ1aWQiOi...5In0="
}
Quello che interessa è la proprietà accessToken.
Bearer
Nella console dei
Developer tools è possibile incollare questo
JavaScript per farsi ritornare il valore stringa del
tokenfor(let key in sessionStorage) {
if (key.indexOf('{"authority":') === 0 && key.indexOf('"scopes":') > 0) {
let token = JSON.parse(sessionStorage[key]).accessToken;
console.log("Bearer " + token);
}
}
da un risultato simile a questo
BearerUtilizzo
Con il token è possibile, ad esempio, fare una chiamata tramite
PowerShell per ottenere il nome di tutte le liste
$url = 'https://tenantName.sharepoint.com/_api/web/lists?$select=Title'
$headers = @{
"Authorization" = "Bearer eyJ0eXAiOiJKV1QiLCJh...xxx...dOrHHC7_sq4OUsCBKCA"
"accept" = "application/json;odata=nometadata"
}
$response = Invoke-WebRequest -Method GET -Uri $url -Headers $headers
$response.statusCode
$response.Content
Il token va inserito nell'header della chiamata nella chiave Authorization.
Note finali
Questo è un metodo semplice è veloce per accedere,
temporaneamente, da remoto a
SharePoint Online senza dover configurate un
App registrations o
Add-in.
Da notare che i privilegi di accesso disponibili sono quelli dell'utente da cui è stato preso il
bearer token.
Il token non dura molto, circa un ora e mezza (90 minuti).