2009-03-07 8 views
1

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 à partir d'un client qui vit sur le domaine de l'entreprise. Lorsque je tente d'ouvrir une connexion, je reçois un SecurityNegotiationException avec le message:Problème Connexion au service WCF sur un serveur

«Une exigence de sécurité latéral à distance n'a pas été remplie lors de l'authentification Essayez d'augmenter la ProtectionLevel et/ou ImpersonationLevel. » L'exception intérieure se lit comme suit: « La connexion réseau a échoué »

Après avoir parlé avec quelques collègues sur les questions et effectuer des recherches Google, je suis venu à la conclusion que la question est que le client tente de se connecter au serveur en utilisant le nom d'utilisateur et le mot de passe de mon réseau d'entreprise. Comme le serveur ne fait pas partie du réseau d'entreprise, il ne connaît pas mon identité d'entreprise et rejette 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 peut-être la solution est que j'ai besoin d'usurper l'identité du compte d'utilisateur qui existe sur la machine du serveur. - J'ai également trébuché sur cet article de codeproject qui démontre l'usurpation d'identité d'utilisateur. Comme le seul compte sur le serveur est Administrateur sans mot de passe, j'ai essayé domain comme l'adresse IP de l'ordinateur comme "10.0.0.11", le nom d'utilisateur comme "Administrator", et le mot de passe comme "". http://www.codeproject.com/KB/dotnet/UserImpersonationInNET.aspx?display=Print Malheureusement, il échoue avec le message:

« Échec de la connexion: nom d'utilisateur inconnu ou mot de passe incorrect »

Une autre allusion au problème: Lorsque le client et le serveur sont les deux machines sur le réseau d'entreprise, il n'y a aucun problème de connexion. Comment puis-je résoudre l'erreur et terminer la connexion au serveur?

Même si ce n'est pas une bonne pratique, je suis complètement d'accord avec la suppression de toute sécurité afin que je puisse continuer ce projet

+0

Quelle était votre question? –

Répondre

2

Jusqu'à ce que vous compreniez les détails, la meilleure façon d'apprendre est de 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 endpoint. Définissez ensuite la propriété bindingConfiguration de votre endpoint sur "NoSecurity".

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

+0

J'ai utilisé la question du forum MSDN: "Comment désactiver la sécurité WCF" http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/271b1816-173c-4c76-a4c4-fd9fda4b5e91/ Notez le suivant: dans l'exemple "Binding1" est référencé par le service "MyService". – MedicineMan

1

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

  1. Ajouter un point final à votre service WCF qui utilise le protocole HTTP (un point de terminaison de service Web) et utiliser ce du domaine. Cela permet de contourner le problème de sécurité, comme vous pouvez le faire ici, ou même de configurer un utilisateur spécifique qui peut accéder à des goodies dans votre serveur de groupe de travail.

  2. Supprimez la sécurité dans le service WCF. Je devrais réfléchir à la façon de faire cela, mais ce n'est pas une bonne idée de toute façon.

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

Le projet de code que vous avez mentionné ne traite pas de l'usurpation d'identité d'une manière qui est directement utile pour WCF, comme l'authentification se produit avant même de frapper ce code. J'imagine que vous pouvez essayer les bits du framework pour le faire, mais ce serait méchant. Il pourrait y avoir un moyen d'utiliser le code dans un point de terminaison HTTP, mais cela peut déjà être fait sans encourir la surcharge de l'ajout de code qui contourne la sécurité de Windows.

+0

Ou peut-être pourrait-on fournir un certificat du groupe de travail au service WCF du domaine pour effectuer l'authentification? –

+0

Quelques suggestions vraiment excellentes. Je vais bien avec la désactivation/désactivation de la sécurité; C'est un réseau complètement interne et même si ce n'est pas une bonne pratique, je veux que ce parc fonctionne dès que possible. Comment puis-je désactiver la sécurité pour que je puisse accomplir cela? – MedicineMan

Questions connexes