La sécurisation de service WCF à l'aide basicHttpBinding qui prend en charge la diffusion

Ma question est en ce qui concerne la meilleure (ou la moins douloureuse") de manière à sécuriser l'accès à un service WCF qui est seulement exposés à des internes de notre société utilisateurs. L'objectif est de s'assurer que le service est uniquement accessible via une simple application Windows forms que chacun de nos utilisateurs a installé. Quand le service est appelé, je veux que le service pour être en mesure de confirmer qu'il a été appelé à partir de la demande de permis.

Le service sécurisé utilise basicHttpBinding, qui prend en charge la diffusion, alors je crois que je suis limité pour le Transport au niveau de la sécurité.

Ci-dessous sont des versions simplifiées de la <bindings> et <services> sections de mon service du fichier de configuration.

<bindings>
  <basicHttpBinding>
    <binding name="Service1Binding" transferMode="Streamed"/>    
  </basicHttpBinding>
</bindings>

<services>
    <service name="WCFServiceSecurity.Service1" 
        behaviorConfiguration="WCFServiceSecurity.Service1Behavior">
        <endpoint address=""
            binding="basicHttpBinding"
            contract="WCFServiceSecurity.IService1"
            bindingConfiguration="Service1Binding"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    </service>
</services>

Quelqu'un peut-il offrir quelques détails à savoir ce que j'aurais besoin de prendre pour mettre en œuvre la sécurité sur ce service?

Note: je suis nouveau sur WCF et je ne suis pas familier avec la sécurité à tous, alors laissez-moi savoir si je n'ai pas fourni suffisamment de détails.


Mise à JOUR:

Comme suggéré par marc_s, je voudrais réserver le service WCF en utilisant une sorte de nom d'utilisateur/mot de passe mécanisme. Cela donne un peu plus en direction d'une réponse, mais je suis toujours un peu floue sur comment de le faire réellement.

Parce que mon service nécessite de diffusion pour être activé, je dois utiliser basicHttpBinding et de sécurité au niveau Transport (à droite?); de plus, la méthode contenue dans mon service ne peut accepter un objet de Flux de données.

En tenant compte de ces contraintes en considération avec ma préférence pour l'utilisation de nom d'utilisateur/mot de passe de validation...

  • Comment dois-je modifier mon service de fichier de configuration à force de nom d'utilisateur/mot de passe pour être livré?
  • Comment mon service de valider les informations d'identification fournies?
  • Comment mon application client de transmettre des informations d'identification du service lors d'un appel?
  • Il nécessité à l'aide de SSL et, le cas échéant, toutes les machines clientes ont besoin d'un certificat?

Mise à JOUR:

Après avoir expliqué le problème que j'ai eu avec la sécurisation de ce service à mon patron, m'a donné le feu vert pour tenter l'Authentification Windows itinéraire. Malheureusement, je n'ai pas eu de chance dans la mise en œuvre de ce type d'authentification avec mon service de Streaming (argh). Après avoir fait les modifications appropriées (comme indiqué ici - la seule exception étant que mon transferMode="Streamed") et l'accès à mon service, j'ai été présenté avec l'erreur suivante:

Requête HTTP streaming ne peut pas être utilisé en conjonction avec l'authentification HTTP. Soit désactiver la demande de streaming ou de spécifier anonyme authentification HTTP.

Je suis tombé sur la citation suivante ici qui offre quelques précisions:

Vous ne pouvez pas faire de transport auth. avec le streaming. Si vous devez utiliser de la requête HTTP en streaming, vous devrez exécuter sans sécurité.

La voie de la sécurité fonctionne est:

WCF Client fait une requête http vers le Serveur.

Le Serveur répond avec quelque chose en disant: "Vous n'êtes pas autorisé, envoyez-moi un basic/digest/etc justificatif d'identité."

Le Client obtient la réponse et renvoie le message avec les informations d'identification cloué sur.

Maintenant que le Serveur reçoit le message, vérifie les informations d'identification, et continue.
Demande de diffusion n'est pas conçu pour fonctionner avec ce motif de sécurité. Si elle le faisait, il serait vraiment très lent, puisque le Client doit envoyer l'ensemble des flux, de passer le message à partir du Serveur qu'il n'était pas autorisé, alors il faudrait renvoyer la totalité du flux des informations d'identification.

Alors maintenant, je suis à la recherche d'avis, de comment feriez-vous pour sécuriser vos compatibles pour la diffusion de service WCF? Comme mentionné précédemment, une sorte de nom d'utilisateur/mot de passe mécanisme serait préférable. Pensez à l'extérieur de la boîte sur celui-ci...

Toute aide est la grandement apprécié!

Si c'est possible, de changer de liaison à un StreamedRequest ou StreamedResponse et vous serez en mesure de permettre le Transport d'Authentification. Utiliser uniquement en Streaming de liaison si sa doit mais je suis sûr que vous pouvez diviser le Téléchargement et Télécharger en différents points de terminaison pour activer cette sécurité.

OriginalL'auteur Steve Dignan | 2009-05-10