[Silverlight] Authentification Windows avec Silverlight 3
J’ai récemment eu besoin de mettre en place un peu de sécurité sur l’un des projets Silverlight sur lequel je travaille. Il fallait faire simple: récupérer l’ensemble des informations de l’utilsiateur connecté.
Pour cela, rien de plus simple: on laisse faire l’authentification Windows qui est nativement gérée par Silverlight 3. Lors de mes tests, qui se faisait avec le serveur Web intégré à Visual Studio (à savoir Cassini), tout se passait bien donc, on passe en production.
Et là, c’est le drame: une fois sur 2, il m’est impossible d’appeler les services WCF utilisés par l’application, car je recevais des erreurs 401 (accès non autorisé).
Après investigations, je suis tombé sur ce site qui m’a finalement donné la raison de l’échec de l’appel des services:
http://developers.de/blogs/damir_dobric/archive/2009/08/22/soap-faults-and-new-network-stack-in-silverlight-3.aspx
La faute revient tout simplement à cette ligne:
1: bool registerResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
A priori tout simple, ce bout de code permet d’indiquer au runtime Silverlight 3 qu’il doit utiliser la “Client HTTP Stack”, plutôt que la “Browser HTTP Stack”, ce qui permet, en cas d’erreur sur un serice WCF, d’avoir le descriptif complet de l’exception plutôt qu'e la fameuse erreur: “Error 404: Not found”.
Cependant, il s’avère que ce bout de code empêche également le proxy de votre service WCF d’envoyer les headers d’authentification ! Du coup, impossible de vous authentifier auprès du service.
Voila, en espérant que cela vous aide et vous évite de perdre trop de temps 
A+
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :