通过https进行WCF身份验证

时间:2012-04-09 14:11:03

标签: json authentication wcf-security webhttpbinding

我有一个使用https进行通信的WCF服务,使用json作为响应格式。我不希望任何人都可以使用我的方法,所以我在匿名和更新的IIS中更改了身份验证。基本到基本。

到目前为止,浏览器要求用户并通过,但我收到以下错误:

  

找不到与绑定WebHttpBinding的端点的scheme http匹配的基址。注册的基地址方案是[https]。

我需要更改到我的端点才能使用身份验证吗?

我的web.config看起来像:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="false" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="restBinding">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Basic" proxyCredentialType="Basic" />
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <services>
      <service name="ContactLibrarySecure.ContactLibraryService">
        <endpoint address="mex" binding="mexHttpsBinding" bindingConfiguration=""
          name="mex" contract="IMetadataExchange" />
        <endpoint address="rest" behaviorConfiguration="restBehavior"
          binding="webHttpBinding" bindingConfiguration="restBinding"
          name="rest" contract="ContactLibrarySecure.IContact" />
        <host>
          <baseAddresses>
            <add baseAddress="https://192.168.1.31/ContactLibrary2.0HTTPS" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="restBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

1 个答案:

答案 0 :(得分:1)

    <?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="false" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="soapBinding" maxBufferSize="2000000000" maxBufferPoolSize="2000000000"
          maxReceivedMessageSize="2000000000">
          <security mode="Transport">
            <transport clientCredentialType="Windows" proxyCredentialType="Basic" />
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </basicHttpBinding>
      <wsHttpBinding>
        <binding name="mexBinding">
          <security mode="Transport">
            <transport clientCredentialType="Windows" />
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
      <webHttpBinding>
        <binding name="restBinding" closeTimeout="00:10:00" sendTimeout="00:10:00"
          maxBufferSize="2000000000" maxBufferPoolSize="2000000000" maxReceivedMessageSize="2000000000">
          <security mode="Transport">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <services>
      <service name="ContactLibrarySecure.ContactLibraryService">
        <endpoint address="mex" binding="wsHttpBinding" bindingConfiguration="mexBinding"
          name="mex" contract="IMetadataExchange" />
        <endpoint address="rest" behaviorConfiguration="restBehavior"
          binding="webHttpBinding" bindingConfiguration="restBinding"
          name="rest" contract="ContactLibrarySecure.IContact" />
        <endpoint address="soap" behaviorConfiguration="soapBehavior"
          binding="basicHttpBinding" bindingConfiguration="soapBinding"
          name="soap" contract="ContactLibrarySecure.IContact" />
        <host>
          <baseAddresses>
            <add baseAddress="https://192.168.1.31/ContactLibrary2.0HTTPS" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="restBehavior">
          <webHttp />
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
        <behavior name="soapBehavior">
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

此配置文件解决了我的问题。我在iis中安装了Windows身份验证后,从基本更改为Windows身份验证。