2010-10-04 4 views
3

J'ai un service WCF hébergé dans un service Windows. Les clients de diverses plates-formes accéderont au service. Maintenant, je voudrais ajouter un mécanisme de sécurité de base. Idéalement, les clients devraient utiliser le nom d'utilisateur/mot de passe pour l'authentification.Sécurité WCF dans un scénario Internet

Quels paramètres de liaison dois-je utiliser dans ce scénario et comment puis-je authentifier le client? L'interopérabilité est plus importante qu'une solution très sécurisée. Si possible, le client ne devrait pas être forcé d'utiliser un certificat ou quelque chose comme ça. De plus, l'authentification ne doit pas être fortement couplée à une base de données SQL Server. Je voudrais inspecter manuellement les informations d'identification du client.

Merci pour votre aide

Répondre

3

Le meilleur pour votre cas peut être BasicHttpBinding avec sécurité est défini sur TransportWithMessageCredentials et le type ensemble de références à UserName. Dans ce cas, votre service sera sécurisé avec HTTPS (nécessite un certificat de serveur pour SSL qui doit être approuvé sur les clients) et l'authentification sera fournie au niveau du message avec UserName Token Profile (en-tête SOAP). Vous pouvez implémenter votre propre password validator.

squelette configuration BasicHttpBinding:

<bindings> 
    <basicHttpBinding> 
    <binding name="Secured"> 
     <security mode="TransportWithMessageCredential"> 
     <message clientCredentialType="UserName" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

Si vous ne souhaitez pas utiliser HTTPS, vous pouvez créer la liaison avec HttpTransport personnalisée, TextMessageEncoding et avec le mode de sécurité est défini sur UserNameOverTransport. Mais vous devez définir allowInsecureTransport sur true (sachez qu'il existe un bug avec la génération WSDL dans ce paramètre).

squelette de configuration personnalisée de liaison:

<bindings> 
    <customBinding> 
    <binding name="Secured"> 
     <security authenticationMode="UserNameOverTransport" allowInsecureTransport="true" /> 
     <textMessageEncoding messageVersion="Soap11" /> 
     <httpTransport /> 
    </binding> 
    </cutomBinding> 
</bindings> 
+0

Merci pour votre réponse. Quelles conséquences pour les clients émergent lorsque HTTPS avec SSL est utilisé? Le client peut-il gérer les paramètres de sécurité au niveau du message? Ou le client doit-il "installer" la certification? Puis-je en quelque sorte envoyer le certifacte comme valeur de hachage et le client peut ajouter cette valeur dans l'en-tête de savon? – WalterOesch

+0

Https définit la sécurité au niveau du transport. Le client n'a pas besoin de faire quoi que ce soit sauf fournir un nom d'utilisateur un mot de passe. L'installation du certificat dépend de l'émetteur du certificat. Si vous utilisez un émetteur de certificat approuvé par le client, le client n'a rien à faire. Sinon, le client doit installer un certificat ou un certificat d'émetteur. Je ne suis pas sûr s'il est possible de fournir un hachage de certificat dans WSDL pour BasicHttpBinding. Vous pouvez l'essayer en spécifiant l'identité du point de terminaison sur le serveur. Cela devrait être possible pour WSHttpBinding. –

Questions connexes