Il blog di Giuseppe Marchi - SharePoint MVP
NAVIGATION - SEARCH

L'header X-RequestDigest per le richieste REST di SharePoint 2013

Nel precedente post abbiamo visto come fare una chiamata REST al nuovo layer esposto da SharePoint 2013 (l'endpoint _api). Una lettura insomma, tramite una richiesta HTTP in GET.
Una cosa molto importante da capire prima di imbattersi nell'utilizzo del servizio REST di SharePoint 2013 è che per effettuare una qualsiasi operazione di modifica al contenuto o alle configurazioni di SharePoint stesso, è necessario seguire queste regole:
  • Fare una chiamata in POST e non in GET
  • Passare tra gli header il parametro X-RequestDigest
La prima regola mi sembra scontata.
La seconda invece è un obbligo imposto, utile a SharePoint per validare la richiesta che proviene dal client.
In realtà questo concetto è presente su SharePoint già da quando si chiamava MOSS 2007, ma veniva utilizzato solo internamente. Ora invece è un concetto cardine della comunicazione tra client e server.
Questo token è una bella stringa crittografata, specifica per l'utente corrente, il sito SharePoint corrente, la data della prima richiesta, che scade dopo un periodo di tempo configurabile. Quando l'utente richiede una pagina SharePoint, questo token di validazione viene ritornato all'interno della pagina così che, quando l'utente sottomette di nuovo la richiesta al server, se il token è cambiato, viene sollevata una Security Exception.
Ecco, questo stesso meccanismo è stato applicato alle richieste REST (veniva già utilizzato internamente dalle librerie del Client Object Model), così da permettere a SharePoint di validare ogni singola richiesta.

In ogni caso, bisogna capire da dove prelevare questo token da attaccare alle nostre richieste di modifica del contenuto o delle configurazioni di SharePoint 2013. Per farlo, abbiamo due diverse opzioni:

Opzione 1 - POST alla URL /_api/contextinfo

self.getCurrentFormDigestValue = function () {

var formDigest = '';
$.ajax({
url: self.webUrl().SPContextInfo(), //è la richiesta alla URL http://siteurl/_api/contextinfo type: 'POST',
contentType: 'application/json;odata=verbose',
headers: { 'Accept': 'application/json;odata=verbose'},
success: function (data) {
formDigest = data.d.GetContextWebInformation.FormDigestValue;
},
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown);
},
async: false
});
return formDigest;
};

In questo caso ho fatto una richiesta sincrona al servizio, quindi occhio che questa richiesta blocca la pagina. Altrimenti avrei potuto valorizzare una variabile di un mio view model e rileggerla quando ne avevo la necessità.

Opzione 2 - Leggere il valore del campo hidden “__REQUESTDIGEST” (valido solo per le SharePoint-Hosted Apps)

var formDigest = $(‘'#__REQUESTDIGEST’').val();


Come vi dicevo, questo token deve essere passato come valore del parametro X-RequestDigest che deve essere presente all'interno degli header della richiesta HTTP che viene fatta alle api REST esposte da SharePoint 2013, nel caso in cui vogliate fare degli inserimenti, delle cancellazioni o delle modifiche ai contenuti o alle configurazioni di vostri siti SharePoint.

Se volete info più dettagliate, le trovate su MSDN:
http://msdn.microsoft.com/en-us/library/jj164022.aspx
blog comments powered by Disqus