Question

J'ai configuré un service WCF sur un serveur qui réside dans son propre groupe de travail. J'ai essayé d'établir une connexion TCP / IP avec un client résidant dans le domaine de l'entreprise. Lorsque j'essaie d'ouvrir une connexion, je reçois une exception SecurityNegotiationException avec le message:

  

" Exigence de sécurité côté distant   n'a pas été rempli pendant   authentification. Essayez d'augmenter le   ProtectionLevel et / ou   ImpersonationLevel. & Quot; L'intérieur   exception lit: "La connexion réseau   a échoué

Après avoir discuté de ces problèmes avec des collègues et effectué des recherches sur Google, je suis parvenu à la conclusion que le problème était que le client essayait de se connecter au serveur à l'aide de mon identifiant et de mon mot de passe réseau. Comme le serveur ne fait pas partie du réseau d'entreprise, il n'a pas connaissance de l'identité de mon entreprise et rejette ensuite la tentative de connexion / connexion. Que cette analyse soit correcte ou non, je n'en ai aucune idée.

Les résultats de Google semblent suggérer que la solution est peut-être que je dois emprunter l'identité d'un compte d'utilisateur existant sur la machine du serveur. --J'ai aussi trébuché sur cet article codeproject qui illustre l'usurpation d'identité de l'utilisateur. Comme le seul compte sur le serveur est l'administrateur sans mot de passe, j'ai essayé domain comme adresse IP de l'ordinateur sous la forme "10.0.0.11", nom d'utilisateur sous le nom "Administrateur" et le mot de passe sous "". http://www.codeproject.com/KB/dotnet/UserImpersonationInNET. aspx? display = Imprimer Malheureusement, cela échoue avec le message:

  

" Échec de connexion: nom d'utilisateur inconnu ou mot de passe incorrect "

Autre astuce sur le problème: lorsque le client et le serveur sont tous deux des machines sur le réseau d'entreprise, il n'y a aucun problème de connexion.

Comment puis-je résoudre l'erreur et établir la connexion au serveur? Même si ce n'est pas une bonne pratique, je suis tout à fait d'accord pour supprimer toute sécurité afin de pouvoir faire avancer ce projet

Était-ce utile?

La solution

Tant que vous n'avez pas saisi les détails, le meilleur moyen d'apprendre consiste à désactiver la sécurité. Vous devez créer une nouvelle configuration de liaison côté serveur avec le mode de sécurité défini sur "Aucun". Nommez-le " NoSecurity " pour plus de commodité. Cette configuration doit avoir le même type (wsHttpBinding, etc.) que vous utilisez sur votre point de terminaison. Définissez ensuite la propriété bindingConfiguration de votre point de terminaison sur "NoSecurity".

Mettez à jour votre configuration client et vous êtes prêt à partir.

Autres conseils

Je ne connais aucun moyen de faire confiance à un domaine par un groupe de travail, ce qui signifie que vous avez plusieurs choix à faire, comme je le vois

  1. Ajoutez un autre point de terminaison dans votre service WCF qui utilise HTTP (un point de terminaison de service Web) et utilisez-le à partir du domaine. Cela résout le problème de sécurité, car vous pouvez emprunter l'identité de celui-ci ici ou même configurer un utilisateur spécifique pouvant accéder aux goodies de votre serveur de groupe de travail.

  2. Détruisez la sécurité dans le service WCF. Il faudrait que je réfléchisse à la façon de procéder, mais ce n’est pas une bonne idée.

  3. Créez un domaine et obtenez une relation de confiance.

Le projet de code que vous avez mentionné ne traite pas de l'emprunt d'identité d'une manière directement utile pour WCF, car l'authentification a lieu avant même que vous puissiez utiliser ce code. J'imagine que vous pouvez utiliser le cadre pour le faire, mais ce serait méchant. Il existe peut-être un moyen d’utiliser le code dans un noeud final HTTP, mais cela peut déjà être fait sans entraîner la surcharge de l’ajout de code qui contourne la sécurité de Windows.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top