WCF Services et Authentification

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

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
On y accède également par clique droit sur le fichier App.config :

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-WCF

WF_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) !?

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.