Question

Si je suis d'hébergement d'un service WCF afin que quelqu'un (i.e. quelqu'un que je connais) peut consommer mon service, mais si quelqu'un d'autre (i.e. quelqu'un que je ne sais pas) consomme serait alors dois-je? Comment puis-je empêcher cela? Comment cela peut-il être atteint?

Peut-il être fait par la limitation de service ou quels sont les autres moyens d'y parvenir?

Était-ce utile?

La solution

Non, il n'y a aucun mécanisme WCF pour permettre à certains clients d'utiliser votre service tout en interdisant d'autres. Vous aurez besoin d'aborder la question d'un angle différent.

Une façon est de publier pas automatiquement vos métadonnées de votre service - par exemple rendre presque « invisible » - puis diffuser les informations de métadonnées nécessaires sous la forme d'un ou plusieurs WSDL et un ou plusieurs fichiers XSD à ces clients que vous souhaitez connecter à votre service. Si vos métadonnées ne sont pas disponibles, quelqu'un juste à votre adresse navigue de service ne sera pas obtenir toute information sur ce qu'il faut appeler.

L'échange de métadonnées est contrôlé par le comportement de <serviceMetadata>, et en ayant un point de terminaison « MEx » sur votre service. Retirer les deux et votre service est invisible.

L'autre façon serait d'interdire tous les utilisateurs externes d'accéder à votre serveur WCF basé sur les pare-feu et les règles du réseau. Cela ne peut pas être fait par WCF, mais votre administrateur réseau pourrait limiter l'accès physique qui ont des adresses IP à la machine où votre service WCF fonctionne.

Marc

MISE À JOUR:
Pour expédier des métadonnées aux utilisateurs qui devraient être en mesure d'appeler votre service, vous pouvez faire une des deux choses:

1) A l'aide svcutil.exe /t:metadata (path+name of your service assembly), vous pouvez extraire les métadonnées de votre ensemble de service (par exemple MyServiceLibrary.dll). Cela vous donnera un ou plusieurs WSDL et un ou plusieurs fichiers XSD, que vous devez expédier à vos utilisateurs visés. Ils peuvent mettre ces fichiers quelque part sur leur disque dur, puis dans le « Ajouter un service de référence », au lieu d'entrer l'URL de découvrir le service, ils peuvent taper le nom du principal WSDL (qui importe tous les autres fichiers) et ils obtenir leur proxy client.

Ou:

2) Avec le service et la course, vous pouvez « Ajouter un nouveau projet » à votre solution, choisissez une bibliothèque de classes (de MyService.Client), puis faire un « Ajouter un service de référence » et entrez l'URL de votre service. Cela va créer tous les fichiers nécessaires et tout dans votre nouvelle bibliothèque de classe. Compiler cette bibliothèque de classe et navire qui MyService.Client.dll assemblage aux utilisateurs que vous souhaitez autoriser l'accès à votre service.

Avec les deux solutions, vous n'avez pas besoin d'avoir l'échange de métadonnées a permis, et quelqu'un d'autre ne peut pas simplement marcher jusqu'à votre service et obtenir toutes les informations nécessaires pour l'appeler.

Autres conseils

Si vous voulez certains des clients pour être en mesure d'utiliser (ou vue) votre service et certains clients de ne pas être autorisés à utiliser (ou vue) votre service, alors vous devez configurer l'authentification sur votre service afin que seuls les clients que vous permettre l'accès peut (ou voir) votre service.

Je ne connais pas votre scénario entier, mais la sécurité du transport avec l'authentification de base serait probablement suffisant. Pour activer que vous pouvez désactiver l'accès anonyme dans IIS, configurer IIS pour utiliser Basic Auth puis dans la configuration de liaison ensemble:

<security mode="Transport">
  <transport clientCredentialType="Basic" />
</security>


Définissez vos MEX se liant à utiliser la place de liaison sécurisée de la valeur par défaut mexHttpBinding. Vous aurez également besoin d'un certificat SSL pour votre site (si vous utilisez WSHttpBinding).

Mise à jour: Voici un exemple, métadonnées personnalisées sécurisé Endpoint montre comment implémenter un service avec un point de terminaison de métadonnées sécurisé.

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