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 on mercoledì 24 dicembre 2008 0.43

Feedback

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

Left by mgutman at 24/12/2008 6.31
Gravatar 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!

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

Left by Omar Damiani at 24/12/2008 9.04
Gravatar 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 ;))

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

Gravatar 022252022252

# grazie

Left by Luca at 11/10/2011 9.51
Gravatar 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:





 
Please add 2 and 6 and type the answer here:

Copyright © Omar Damiani

Design by Bartosz Brzezinski

Design by Phil Haack Based On A Design By Bartosz Brzezinski