J'ai un service WCF qui devra recevoir les informations d'identification du client et gérer certaines données basées sur les rôles, en fonction de ma méthode d'authentification. Les clients résideront sur de nombreux systèmes différents, et en tant que tels, chaque client aura un userID et un pw uniques. J'utilise basicHttpBinding et ai lu quelques articles, comme celui-ci, http://nirajrules.wordpress.com/2009/05/22/username-over-https-custombinding-with-wcf%E2%80%99s-channelfactory-interface/, qui décrivent le processus.WCF - Configuration de l'authentification client/serveur dans les en-têtes?
Donc, ce que je cherche, c'est si quelqu'un a un client/serveur complet configuré comme ça pour voir si je peux en tirer ma propre solution. Ce que je voudrais faire est de faire passer le nom d'utilisateur et le mot de passe dans les en-têtes pour chaque requête, en repassant une sorte de SecurityTokenValidationException en cas d'échec, ou en continuant à passer.
Merci.
MISE À JOUR
J'utilise le WSHttpBinding avec la configuration suivante sur le client et le serveur:
<wsHttpBinding>
<binding name="wsHttpEndpointBinding" >
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Basic" />
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
Et l'appel vers le serveur du client comme suit:
ServiceReference1.ServiceClient myClient = new ServiceReference1.ServiceClient();
myClient.ClientCredentials.UserName.UserName = "billuser";
myClient.ClientCredentials.UserName.Password = "mypassword";
Response.Write("Data from WCF Service: " + myClient.GetData(1));
Je pense que j'ai besoin d'un coup de main pour relier le CustomUsernamePasswordValidator sur le serveur car je reçois toujours ting the '... n'a pas pu être activé.' Erreur.
Lorsque je suis passé de basicHttpbinding à wsHttpbinding (liaison de point de terminaison = "wsHttpBinding" bindingConfiguration = "wsHttp") j'obtiens l'erreur, "Le service demandé ... n'a pas pu être activé. information." Comme il s'agit d'une solution hébergée, je n'ai pas accès au journal. Je le fais sur https. – ElHaix
Si vous utilisez https, avez-vous configuré la sécurité du transport pour la liaison? La sécurité du transport signifie que le protocole de transport crypte le canal. Comme vous utilisez https, vous devez activer la sécurité du transport pour la liaison. Essayez de configurer cela et voyez si cela fonctionne. Vous aurez probablement besoin de voir le rapport d'exception complet pour que la sécurité fonctionne. Il est généralement un peu d'essai et d'erreur pour le mettre en marche ... ce n'est pas vraiment "difficile", mais pas "évident" la première fois que vous implémentez la sécurité pour un point de terminaison. – jrista
Pour le wsHttpbinding à la fois pour le client et le serveur, j'ai défini security mode = "TransportWithMessageCredential", transport clientCredentialType = "Basic", message clientCredentialType = "UserName". Donc, par le message d'erreur, je sais qu'ils se parlent entre eux, mais pas correctement :). Je place également proxy.ClientCredentials.UserName.UserName et proxy.ClientCredentials.UserName.Password avant de faire l'appel de service (si je n'ai pas, c'est une autre erreur). – ElHaix