J'ai un site Web hébergé sur ServerA qui s'exécute en utilisant un pool d'applications en utilisant un accout utilisateur spécial avec des privilèges de domaine pour accéder à notre base de données. Dans le fichier de configuration du site, je précise:Informations d'identification Windows et WCF
<identity impersonate="true" />
J'ai alors un service qui est également ServerA et hébergé dans une application console par programme (par exemple pas de fichier de configuration) comme ci-dessous.
Uri uri = new Uri("net.tcp://ServerA:9900/Service/");
ServiceHost host = new ServiceHost(typeof(Service1), uri);
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Message;
binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
ServiceEndpoint serviceEndpoint = host.AddServiceEndpoint(typeof(IService1), binding, uri);
EndpointAddress myEndpointAddress = new EndpointAddress(uri, EndpointIdentity.CreateSpnIdentity("MyspnName"));
serviceEndpoint.Address = myEndpointAddress;
host.Open();
Quand j'ouvre un navigateur sur ma machine locale et aller sur le site le site tente de se connecter au serveur WCF et renvoie l'erreur « La demande de jeton de sécurité ne pouvait pas être satisfaite, car l'authentification a échoué. »
Le site utilise le code suivant pour se connecter au service:
Uri uri = new Uri("net.tcp://ServerA:9900/Service/");
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Message;
binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
EndpointIdentity epid = EndpointIdentity.CreateSpnIdentity("MyspnName");
EndpointAddress endPoint = new EndpointAddress(uri, epid);
//EndpointAddress endPoint = new EndpointAddress(uri);
ChannelFactory<IService1> channel = new ChannelFactory<IService1>(binding, endPoint);
channel.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation;
IService1 service = channel.CreateChannel();
service.PrintMessage("Print this message!");
Pour PrintMessage, la méthode que je vous appelle, j'ai essayé et [OperationBehavior(Impersonation = ImpersonationOption.Required)]
.. .Allowed .. mais l'erreur est la même.
Lorsque j'exécute le site localement en utilisant LocalHost il n'y a pas d'erreur et cela fonctionne parfaitement. Et aussi quand je change l'identité impersonate = "false" dans mon web.config il s'exécute mais mes identifiants de Windows ne sont pas passés dans le service de WCF qui est le point entier.
Des idées que je manque? Pls pas de liens généraux, je l'ai probablement déjà lu!
merci beaucoup
Cela serait vraiment utile si vous postez le balisage du fichier de configuration dans le cadre de votre question. La solution peut être aussi simple qu'oublier d'ajouter une référence, etc. –