Recuperare il Bearer di SharePoint Online da browser
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.
La chiave ha un nome complesso, si tratta di un JSON, che contiene la parola author
e il corrispondente valore è simile a questo
da un risultato simile a questo
Da notare che i privilegi di accesso disponibili sono quelli dell'utente da cui è stato preso il bearer token.
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
Da notare che ci sono 2 chiavi con la parola author, va presa quella che contiene anche la parola scopes.
La chiave corretta è simile a questaText: Chiave con access token
{
"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"
}
JSON: Valore access token
{
"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 tokenJavaScript
for(let key in sessionStorage) {
if (key.indexOf('{"authority":') === 0 && key.indexOf('"scopes":') > 0) {
let token = JSON.parse(sessionStorage[key]).accessToken;
console.log("Bearer " + token);
}
}
Utilizzo
Con il token è possibile, ad esempio, fare una chiamata tramite PowerShell per ottenere il nome di tutte le listePowerShell: Elenco liste del sito
$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).