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 tools
Developer tools
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 questa

Text: 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"
}
e il corrispondente valore è simile a questo

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 token

JavaScript

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);
    }
}
da un risultato simile a questo
Bearer
Bearer

Utilizzo

Con il token è possibile, ad esempio, fare una chiamata tramite PowerShell per ottenere il nome di tutte le liste

PowerShell: 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).
Tags:
SharePoint Online75 JavaScript184 Browser25 SharePoint 201668
Potrebbe interessarti anche: