WCF REST服务使用Windows身份验证和SSL(WCF REST Service with

2019-10-22 18:23发布

我有一个被Android,iOS和asp.net web应用程序消耗WCF REST服务。 所有端点方法返回JSON格式,所以我使用的WebHttpBinding。 问题开始时,我通过激活Windows身份验证(在此之前,禁止匿名)担保的服务。 当我尝试从asp.net web应用程序收到以下错误添加服务引用:

The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was 'Negotiate,NTLM'.
The remote server returned an error: (401) Unauthorized.

当我打电话终点在浏览器窗口的对话框被显示用户名和瞬息,一切工作正常,但是当我尝试添加引用我收到错误。 我还使用SSL和服务只有HTTPS地址。

web.config中WCF REST服务:

<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" executionTimeout="90"        maxRequestLength="20000" useFullyQualifiedRedirectUrl="false" requestLengthDiskThreshold="8192" />
    <authentication mode="Windows" />
</system.web>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<bindings>
  <webHttpBinding>
    <binding name="WebHttpEndpointBinding"   maxReceivedMessageSize="200000000" maxBufferPoolSize="200000000">
      <readerQuotas maxDepth="32" maxArrayLength="2000000000"   maxStringContentLength="2000000000" />
      <security mode="Transport">
      <transport clientCredentialType="Windows"  /> 
      </security>
    </binding>
  </webHttpBinding>  
</bindings>
<services>
  <service name="restSrvService.restSrvRestService"   behaviorConfiguration="serviceBehavior">
    <endpoint address="" name="webHttpEndpoint" binding="webHttpBinding"   bindingConfiguration="WebHttpEndpointBinding" behaviorConfiguration="web"   contract="restSrvService.IrestSrvRestService">   
    </endpoint> 
 <endpoint address="mex" binding="mexHttpBinding"  contract="IMetadataExchange"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="serviceBehavior">
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
     <serviceAuthenticationManager authenticationSchemes="IntegratedWindowsAuthentication" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="web">
      <endpointDiscovery enabled="true">
      </endpointDiscovery>
      <webHttp  />
    </behavior>
  </endpointBehaviors>
</behaviors>
</system.serviceModel>

web.config中的Web应用程序:

    <system.webServer>
      <modules runAllManagedModulesForAllRequests="true"></modules>
    </system.webServer>
    <system.serviceModel>
    <bindings>
     <webHttpBinding>
       <binding name="WebHttpEndpointBinding" bypassProxyOnLocal="true" useDefaultWebProxy="true" maxReceivedMessageSize="200000000" maxBufferPoolSize="200000000">
         <readerQuotas maxDepth="32" maxArrayLength="2000000000" maxStringContentLength="2000000000" />
           <security mode="Transport">
             <transport clientCredentialType="Windows"></transport>
           </security>
       </binding>
     </webHttpBinding>
    </bindings>
    <client>

      <endpoint address="https://serviceAddress/restSrvRestService.svc/"
        binding="webHttpBinding" bindingConfiguration="WebHttpEndpointBinding"
        contract="restSrvService.IrestSrvRestService"  behaviorConfiguration="webEndpoint" name="WebHttpEndpoint">
        <identity>
        </identity>
      </endpoint>
    </client>
    <behaviors>
      <endpointBehaviors>
        <behavior name="webEndpoint">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
文章来源: WCF REST Service with Windows Authentication and SSL