Comment gérer l'authentification dans les WCF Services ?
Au delà de la gestion de l'authentification dans une application web (ASP.NET), il faut bien un mécanisme pour gérer l'authentification dans les Services WCF (ou services web). Un mécanisme qui permette à mon WCF Service de dire si l'application cliente qui tente d'accéder au Service est autorisée à le faire ou non.
Qu'est ce qu'il existe sur ce sujet dans le .NET ?
Exemples de code source
Il existe quelques exemples de code, on se dirigera d'abord vers MSDN de Microsoft :
How to: Specify Client Credentials for a Data Service Request (WCF Data Services)
By default, the client library does not supply credentials when sending a request to an OData service. However, you can specify that credentials be sent to authenticate requests to the data service by supplying a NetworkCredential for the Credentials property of the DataServiceContext.
http://msdn.microsoft.com/en-us/library/gg258445(v=vs.110).aspx
Un peu complexe, non ?
Au début il y avait :
Authentication and Authorization in WCF Services - Part 1
http://msdn.microsoft.com/library/ff405740.aspx
Dans Visual Studio 2013 :
On y accède également par clique droit sur le fichier App.config :
By default, the client library does not supply credentials when sending a request to an OData service. However, you can specify that credentials be sent to authenticate requests to the data service by supplying a NetworkCredential for the Credentials property of the DataServiceContext.
http://msdn.microsoft.com/en-us/library/gg258445(v=vs.110).aspx
Un peu complexe, non ?
Au début il y avait :
Authentication and Authorization in WCF Services - Part 1
http://msdn.microsoft.com/library/ff405740.aspx
Prise en main des outils WCF Services
Pour utiliser correctement ces exemples, il faut prendre en main les outils : Client Test WCF et l'éditeur de configuration WCF.Dans Visual Studio 2013 :
Editeur de configuration des services WCF |
Configuration des Services WCF |
Si vous configurez correctement vos services WCF au lancement de l'application vous aurez "Client Test WCF" qui se lancera :
Au démarrage de l'application web lancement de Client Tests WCF |
Voilà la prise en main est assez complexe, vous devrez également supprimer et refaire les références de services, c'est le petit jeu habituel. Le code gérer issu de projets déjà existant ne fonctionne bien évidemment pas sur votre machine il faut donc supprimer et recommencer.
Autres exemples d'authentification dans les WCF Services
On trouve également dans le CodeProject :
Custom Authorization in WCF
http://www.codeproject.com/Articles/33872/Custom-Authorization-in-WCFWF_WCF_Samples
Le must have d'MSDN !http://www.microsoft.com/en-us/download/confirmation.aspx?id=21459
Je me demande bien pourquoi ils sont mélangés les exemples WCF et WF (Workflow Foundation) !?
Bref tout ceci ne fonctionne pas très bien à croire qu'il y a peut d'intérêt à authentification les application.net dans les WCF Sercices ou bien une autre hypothèse : c'est très complexe à mettre en oeuvre.
On finira par écrire le code suivant :
private void logInButton_Click(object sender, EventArgs e)
{
proxy = new SecureServiceClient("WSHttpBinding_ISecureService");
proxy.ClientCredentials.UserName.UserName = nameTextBox.Text;
proxy.ClientCredentials.UserName.Password = passwordTextBox.Text;
}
Bref tout ceci ne fonctionne pas très bien à croire qu'il y a peut d'intérêt à authentification les application.net dans les WCF Sercices ou bien une autre hypothèse : c'est très complexe à mettre en oeuvre.
Il faut tout simplement mettre en oeuvre une communication simple par double clef de cryptage et donc il n'y a pas de mécanisme autre que Crypto à utiliser.
WCF Services avec un jeton d'encryptage customisé
Une autre piste à parcourir, c'est en anglais et c'est Ici.
Mais on est pas loin d'une mécanisme spécifique ... Spécifier l'authentification dans les WCF Services ce serait par exemple l'échange d'un message avec un contenu qui pourrait déterminer si l'application cliente est authorisée à accéder aux WCF Services.