2009-05-09 9 views
7

Comment sécuriser un service Web WCF activé par Silverlight avec SSL? J'ai essayé de le configurer comme un service WCF standard sécurisé par SSL, mais cela ne semble pas fonctionner. Que définissez-vous dans le Web.Config, et que définissez-vous dans les Silverlight ServiceReferences.ClientConfig?Comment sécuriser un service Web WCF activé par Silverlight avec SSL?

J'ai remarqué que dans le fichier ServiceReferences.ClientConfig de l'application cliente Silverlight, la balise "Binding" ne permet que basicHttpBinding et non wsHttpBinding. Cela signifie-t-il que vous ne pouvez pas sécuriser un service WCF activé par Silverlight? Si oui, y a-t-il de meilleures approches pour le sécuriser?

Répondre

-2

WS * est pas pris en charge dans Silverlight - changer fondamentalement l'URL dans la configuration du client pour être https: // url - c'est tout ce que vous pouvez faire

+0

J'ai essayé, le service ne serait alors pas se connecter. – Yttrium

3

dans le fichier ServiceReferences.ClientConfig de Silverlight application client que la balise "Binding" n'autorise que basicHttpBinding et non wsHttpBinding. Cela signifie-t-il que vous ne pouvez pas sécuriser un service WCF activé par Silverlight?

Non, cela ne signifie pas cela. Vous pouvez avoir un basicHttpBinding et lui attribuer une sécurité au niveau du transport (HTTPS avec SSL). Cela ne devrait pas être un problème.

Marc

PS: Beaucoup un de ces liens vous donne plus de perspicacité et de la proverbiale "AHA!" :-)

+0

Merci! Bien que je suis confus quant à ce que je mets dans le fichier Web.Config qui héberge le service? Est-ce simplement basicHttpBinding avec la sécurité du transport? J'ai essayé cela et renvoie une erreur "introuvable". – Yttrium

+0

Est-ce que votre serveur qui héberge le service a un certificat SSL installé et tout? Si vous souhaitez utiliser la sécurité SSL au niveau du transport, SSL au niveau du transport doit être configuré correctement au préalable. –

+0

Oui, le site a un SSL qui fonctionne, je peux accéder à un service .ASMX en utilisant la sécurité de transport et en le pointant sur https dans le fichier de configuration Silverlight. Mais je ne peux pas pour la vie de moi obtenir un service WFC Silverlight-activé via https avec la sécurité du transport. – Yttrium

11

Il y a trois endroits clés que je config utiliser https dans mes propres applications.

Web.config

Dans la balise de comportement incluent cette ligne:

<serviceMetadata httpsGetEnabled="true"/> 

Pour le point de terminaison MEX, assurez-vous d'utiliser le protocole https:

<endpoint address="mex" binding="mexHttpsBinding" 
      contract="IMetadataExchange" /> 

Créer une liaison personnalisée.La partie importante est la sécurité des transports:

<basicHttpBinding> 
    <binding name="myServicesBinding"> 
     <security mode="Transport"/> 
    </binding> 
    </basicHttpBinding> 

Vous pouvez également inclure les habituels trucs d'autorisation:

<authorization> 
    <allow users="?"/> 
    <deny users="*"/> 
</authorization> 

Silverlight

Sur la fin Silverlight, soit pointer le ServiceReference au moment sécurisez le service ou configurez les connexions manuellement dans le code. le fichier ServiceReferences.ClientConfig devrait avoir la substance de la sécurité dans ce:

<security mode="Transport"/> 

Et la version du code ressemble à ceci:

BasicHttpBinding b = new BasicHttpBinding(BasicHttpSecurityMode.Transport); 

Il y a des choses probablement plus complexes qui peuvent être faites, mais cela devrait être assez bon pour la plupart des gens.

3

Pour créer Silverlight Activé WCF service Web à l'aide de SSL que vous devez faire les étapes suivantes:

  1. Créer norme Web Service WCF Silverlight activé à l'aide de Visual Studio 2010
  2. changement 3 places de webconfig. xml:

    a. Dans serviceMetadata, remplacez httpGetEnabled par httpsGetEnabled comme ceci:

    <behaviors > 
        <serviceBehaviors > 
        <behavior name="" > 
         <serviceMetadata httpsGetEnabled="true" /> 
         <serviceDebug includeExceptionDetailInFaults="false" /> 
        </behavior> 
        </serviceBehaviors> 
    </behaviors> 
    

    b. En liaison obligatoire httpTransport to httpsTransport:

    <bindings> 
        <customBinding> 
        <binding name="Project.Web.YourService.customBinding0"> 
         <binaryMessageEncoding/> 
         <httpsTransport/> 
        </binding> 
        </customBinding> 
    </bindings> 
    

    c. Point de terminaison = changement de liaison "mexHttpBinding" à la liaison = "mexHttpsBinding":

    <service name="Project.Web.YourService.YourService"> 
        <endpoint address="" binding="customBinding" bindingConfiguration="Project.Web.YourService.customBinding0" 
        contract="Project.Web.YourService.YourService" /> 
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> 
    </service> 
    
  3. Ne pas utiliser ServiceReferences.ClientConfig. Créer tout code derrière - il est facile à déployer sur le serveur:

    CustomBinding binding = new CustomBinding(new BinaryMessageEncodingBindingElement(), new HttpsTransportBindingElement());   
    YourServiceReference.YourServiceClient service = new YourServiceReference.YourServiceClient (binding, new EndpointAddress(new Uri("https:yourhostname/YourService.svc").AbsoluteUri));   
    service.YourMethodCompleted += new EventHandler<YourServiceReference.YourMethodCompleted EventArgs>(service_YourMethodCompleted); 
    service.YourMethodAsync(); 
    
Questions connexes