Article original publié le jeudi 27 octobre 2011

Le titre de ce billet peut laisser penser que les choses sont plus compliquées que la solution finale. Il s’agit en réalité de combiner les techniques dont j’ai parlé dans deux billets précédents : http://blogs.technet.com/b/speschka/archive/2010/09/25/retrieving-rest-data-in-a-claims-based-auth-site-in-sharepoint-2010.aspx et http://blogs.technet.com/b/speschka/archive/2011/04/01/retrieving-data-from-a-multi-auth-site-using-the-client-om-and-web-services-in-sharepoint-2010.aspx. La version courte du scénario est celle-ci - certains voulaient faire quelque chose comme un test ping de bilan de santé sur un site SharePoint utilisant l’authentification SAML. Avant cela, ils ne travaillaient qu’avec des sites utilisant l’authentification Windows, et dès qu’ils ont essayé ces outils sur un site qui prenait en charge différents types d’authentification - SAML et Windows - ces outils ont cessé de fonctionner.

L’objectif du bilan de santé consiste à envoyer une demande à un site et à vérifier que des données sont renvoyées ; si un code d’erreur est renvoyé à la place, on peut commencer à l’analyser. J’ai décidé que le moyen le plus simple pour le faire était de passer un appel au fichier listdata.svc qui est le point de terminaison REST pour le site. C’est quelque chose qui sera toujours là, et le configurer de manière à le forcer à utiliser NTLM sur un site à authentification multiple est quelque chose que je pensais être assez facile, et ça l’a été. L’essentiel de l’approche consiste à lancer une HttpWebRequest et à ajouter l’en-tête que j’ai décrit dans le deuxième lien ci-dessus pour le forcer à utiliser NTLM. Le résultat est un bout de code de lecture assez évidente qui ressemble à ceci :

string endpoint = UrlTxt.Text + "/_vti_bin/listdata.svc";
    
//envoyer une demande de données à l’interface REST
HttpWebRequest webRqst = (HttpWebRequest)WebRequest.Create(endpoint);
webRqst.UseDefaultCredentials = true;
webRqst.Method = "GET";
webRqst.Accept = "*/*";
webRqst.KeepAlive = true;
webRqst.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");

//lire la réponse
HttpWebResponse webResp = webRqst.GetResponse() as HttpWebResponse;

//faire la demande et obtenir la réponse
StreamReader theData = new StreamReader(webResp.GetResponseStream(), true);
string payload = theData.ReadToEnd();
theData.Close();
webResp.Close();

ResultsTxt.Text = payload;

Comme vous le voyez, je me contente de créer la demande, de définir quelques propriétés, puis d’ajouter mon en-tête qui indique à SharePoint d’utiliser l’authentification Windows. Ensuite, je fais ma demande et c’est bon. C’est un projet tout simple, mais j’ai joint la solution tout entière à ce billet au cas où.

 

Ce billet de blog a été traduit de l’anglais. Vous trouverez la version originale de l’article sur Retrieving REST Data Using NTLM From a Dual Auth Site in SharePoint 2010