如何在IIS上配置我的WCF(svc)服务以仅在HTTPS请求上提供服务?

时间:2013-10-09 15:50:53

标签: c# asp.net wcf iis ssl

我有一个在Windows 2008 IIS Web服务器上运行的WCF(svs)Web服务。

IIS服务器已经安装了SSL证书,并且通过HTTP和HTTPS托管经典ASP和PHP。

我已将WCF服务作为应用程序安装在IIS服务器上(在同一域上),它可以完美地使用HTTP和HTTPS提供请求。

但是,我希望此WCF服务仅提供HTTPS请求和响应。

我需要在WCF web.config中进行哪些更改才能实现此目的?

更新

继上面的帖子之后,我设法研究了以下似乎使用web.config文件工作的内容;

<system.serviceModel>
    <services>
     <service behaviorConfiguration="returnFaults" name="MyService.MonitorService">
      <endpoint binding="wsHttpBinding" bindingConfiguration=
            "TransportSecurity" contract="MyService.IMonitorSvc" />
     </service>
   </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="returnFaults">
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="true" 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>
    </behaviors>
    <bindings>
        <wsHttpBinding>
           <binding name="TransportSecurity">
                 <security mode="Transport">
                  <transport clientCredentialType="None"/>
                  </security>
            </binding>
          </wsHttpBinding>
    </bindings>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

任何人都可以确认这是WCF服务的正确方法,强制所有请求都是通过HTTPS(SSL)进行的吗?

基本上使用上述内容,用户是否能够向服务发出HTTP请求?或者服务是否总是强制执行HTTPS

感谢您的澄清。

1 个答案:

答案 0 :(得分:2)

使用Microsoft URL Rewrite module,然后将以下内容添加到web.config文件中:

<system.webServer>
    <rewrite>
        <rules>
            <clear />
            <rule name="Redirect to https" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                </conditions>
                <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

如果这是不可接受的(因为您必须记住在其他部署中添加此模块),那么this answer指出如何编写自己的https重定向器。

我对此并不完全确定,但您也可以使用System.Web.HttpContext.Current.Request.IsSecureConnection检查实际代码。