web-dev-qa-db-fra.com

Comment activer HTTPS sur WCF RESTful Service?

Comment faire fonctionner wcf sur https. Je veux utiliser ce wcf sur https J'ai recherché de nombreux articles je n'ai pas obtenu la réponse s'il vous plaît aidez-moi pour les nouveaux concepts wcf. Je veux l'appeler depuis ajax, jquery

 <system.serviceModel >
<services>
  <service
    name="WcfRestfulService.HttpService" behaviorConfiguration="ServiceBehaviour" >
    <endpoint address="" binding="webHttpBinding" behaviorConfiguration="web"
              contract="WcfRestfulService.IHttpService">
    </endpoint>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehaviour">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpsGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="web">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
16
Tajkumar

Il semble que vous construisez un service RESTful avec WCF et que vous êtes vraiment proche pour le sécuriser.

Voici ce que vous devez faire pour le sécuriser:

  1. Ajoutez une nouvelle configuration WebHttpBinding dont le mode de sécurité est défini sur Transport.
  2. Attribuez cette nouvelle configuration WebHttpBinding à la liaison de votre point de terminaison de service.
  3. Assurez-vous que votre service RESTful n'est accessible que via HTTPS en définissant httpGetEnabled="false".
  4. Configurez le point de terminaison de publication de métadonnées pour utiliser HTTPS.

Ces changements sont tous résumés ci-dessous dans le fichier de configuration révisé (voir les commentaires pour les points qui ont changé). Notez également que votre point de terminaison de service doit utiliser le schéma HTTPS et non HTTP.

<system.serviceModel >
  <services>
     <service name="WcfRestfulService.HttpService"
              behaviorConfiguration="ServiceBehaviour" >
         <endpoint address="" 
                   binding="webHttpBinding"
                   <!-- Add reference to secure WebHttpBinding config -->
                   bindingConfiguration="webHttpTransportSecurity"
                   behaviorConfiguration="web"
                   contract="WcfRestfulService.IHttpService" />
         <!-- Need to make sure that our metadata 
              publishing endpoint is using HTTPS as well -->
         <endpoint address="mex"
                   binding="mexHttpsBinding"
                   contract="IMetadataExchange" />
     </service>
  </services>
  <!-- Add secure WebHttpBinding config -->
  <bindings>
     <webHttpBinding>
        <binding name="webHttpTransportSecurity">
           <security mode="Transport" />
         </binding>
      </webHttpBinding>
  </bindings>
  <behaviors>
      <serviceBehaviors>
         <behavior name="ServiceBehaviour">
             <serviceMetadata httpsGetEnabled="true"
                              <!-- Make sure the service can 
                                 be accessed only via HTTPS -->
                              httpGetEnabled="false"/>
             <serviceDebug includeExceptionDetailInFaults="false"/>
         </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
         <behavior name="web">
             <webHttp/>
         </behavior>
      </endpointBehaviors>
  </behaviors>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
35
Derek W

Vous devez définir security mode="Transport" dans la reliure

  <basicHttpBinding>
    <binding name="secureHttpBinding">
      <security mode="Transport">
        <transport clientCredentialType="None"/>
      </security>
    </binding>
  </basicHttpBinding>

En savoir plus sur MSDN

2
Daniel Stackenland

J'ai eu le même problème, mais je voulais tester les requêtes get HTTP, car mes services sont internes.

N'oubliez pas de rendre également le HTTPS activé. httpsGetEnabled="true"

Ma configuration est ci-dessous à titre d'exemple:

   <bindings >
      <basicHttpBinding>
        <binding name="secureHttpBinding" >
          <security mode="Transport" />
        </binding>
   </bindings>
    .....
    <behaviors>
      <serviceBehaviors>
        <behavior >
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
       </serviceBehaviors>
     </behaviors>
0
Dai Bok