SharePoint web services, Visual Studio e l'autenticazione perduta (?!?)

Questa cosa davvero bizzarra (vi prego, ditemi che ho qualche grossa lacuna, preferirei...) la scrivo perchè (spero che sia complice qualche festicciola natalizia) mi ha fatto perdere due giorni lavorativi.

Finalmente stasera ho avuto l'illuminazione. Ho dovuto abbandonare la mia razionalità, ma d'altronde Einstein insegna "Imagination is more important than knowledge".

Veniamo al dunque.

Premesso che, fino a lunedì, ancora non avevo mai utilizzato WCF, ho deciso di non farmi problemi ad utilizzarlo per referenziare i web service di SharePoint.

Fin qua tutto ok.

Peccato che poi, alla chiamata di un qualsiasi metodo di un qualsiasi web service (tra quelli di SharePoint ovviamente), ricevo un errore di autenticazione.

Io purtroppo sul discorso security sono un po' carente moltiplicato per la mia carenza WCF crea un bel mondo di incognite...:)

Eppure...mi sembra tutto giusto, perchè non mi autentica con la mia utenza (che tra l'altro è admin del mio sito SharePoint) ?

listService.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
listService.ClientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("pippo", "pippo99", "SHARE1");
listService.ClientCredentials.Windows.AllowNtlm = true;

Niente da fare, non mi autentica.

Cerco informazioni un po' su internet, un po' su vari libri di WCF dando la colpa alla mia ignoranza sull'argomento. Chissà come si implementa l'NTLM con WCF...

Niente da fare, tutto mi riporta al fatto che, così come ho fatto è giusto. Anche la sezione Security dell'app.config è ok.

<security mode="TransportCredentialOnly">
  <transport clientCredentialType="Ntlm"/>
  <message clientCredentialType="UserName" algorithmSuite="Default" />

</security>

Mi arrendo e mi dico: proviamo a farlo nella vecchia maniera...ovvero aggiungere il servizio come web service e non come servizio WCF.

Così faccio, cambio leggermente il codice:

listService.Credentials = new NetworkCredential("pippo", "pippo99", "SHARE1");

Stesso errore, ancora non mi autentica. Provo ancora a controllare la validità della mia utenza con il browser ed è ok.

Non capisco cosa devo fare e mi arrovello, perdendo tempo in inutili tentativi.

Alla fine, provo impostando direttamente l'Url del webservice una volta istanziato e...sorpresa: funziona!

Ma come è possibile? E' lo stesso Url con la quale l'ho referenziato, chi l'ha cambiato?!?

Nessuno: Visual Studio, quando viene referenziato un web service di SharePoint, elimina qualsiasi menzione a eventuali sottositi.
Se per esempio quindi il web service referenziato (come nel nostro caso) è:

http://nomedominio.com/sottosito/_vti_bin/lists.asmx

Visual Studio in realtà memorizzerà l'indirizzo così:

http://nomedominio.com/_vti_bin/lists.asmx

Nella logica delle directory virtuali di SharePoint non fa una piega, ma in effetti è chiaro che utilizzare il web service dalla root o da un suo sottosito, non è esattamente la stessa cosa...

Alla fine, sono tornato nel mio progetto dove l'avevo referenziato con WCF, mi è bastato impostare l'Url corretto e...funziona.

listService.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://nomedominio.com/sottosito/_vti_bin/lists.asmx");

Non aggiungo altro.

Print | posted @ mercoledì 24 dicembre 2008 0.43

Comments on this entry:

Gravatar # re: SharePoint web services, Visual Studio e l'autenticazione perduta (?!?)
by mgutman at 24/12/2008 6.31

Quindi, se ho capito bene, alla fine è un bel bug di Visual Studio, no ? Come fa a cambiarti i riferimenti di cosa hai chiesto ? E' come se chiedi ad una ragazza di uscire, lei risponde che non può, e tu gli devi dire, guarda che non intendo qell'altra ( la moglie di Becham per esempio :) ), intendevo proprio te!
  
Gravatar # re: SharePoint web services, Visual Studio e l'autenticazione perduta (?!?)
by Omar Damiani at 24/12/2008 9.04

Non so bene di chi sia la colpa, mi sfuggono certe logiche "a basso livello" della creazione dei proxy per web services.

Come dicevo, nella logica delle directory virtuali di SharePoint, il discorso (dal punto di vista tecnico) ha un senso, dato che i web services vengono replicati solo virtualmente per ogni sotto sito...

Però effettivamente il tuo esempio calza a pennello, proprio per il fatto che sulla ragazza a cui lo chiedi evidentemente hai i permessi per farlo, mentre per Victoria mi sa che bisogna richiamare un bel SPSecurity.RunWithElevatedPrivileges ;))
  
Gravatar # re: SharePoint web services, Visual Studio e l'autenticazione perduta (?!?)
022252022252
  
Gravatar # grazie
by Luca at 11/10/2011 9.51

Ho notato anche io che Visual Studio lo memorizza sbagliato,
però tornando in modifica dell'impostazione sbagliata poi lo mantiene.
In ogni caso ho trovato utile il tuo esempio perché io non riuscivo a farlo funzionare.
  

Your comment:

Title:
Name:
Email:
Website:
 
Italic Underline Blockquote Hyperlink
 
 
Please add 5 and 6 and type the answer here: