WCF + Basic Auth - 不会停止使用匿名身份验证

时间:2011-10-04 16:59:02

标签: wcf iis-7.5 basic-authentication http-basic-authentication

我一直在尝试创建一个使用基本身份验证的WCF服务,到目前为止,我一直在发出一条错误消息,指出该服务需要匿名身份验证,即使我认为我已将web.config配置为使用Basic身份验证。

我花了几个小时尝试并且未能找到问题的解决方案,所以我想在这里尝试一下。我怀疑这是我忽视的东西。

这就是我正在做的事情。我创建了一个Web项目,添加了一个wcf服务,创建了另一个Web项目,并添加了一个.aspx页面来测试该服务。我没有在默认的wcf服务配置中更改 ANYTHING 。我可以部署到IIS,如果我打开浏览器窗口并导航到该页面,一旦启用匿名身份验证,该服务就可以正常工作。我也可以使用测试页面来访问服务而没有任何问题。

然后,我将服务更改为使用基本身份验证(请参阅下面的服务的web.config)并重新部署。我没有更改IIS的身份验证以使用Basic,因此它仍设置为使用匿名身份验证。我刷新了浏览器并显示了服务。测试网页仍然可以访问该服务。

然后,我在IIS中更改了身份验证方案以使用Basic,并确保禁用所有其他类型的身份验证。当我尝试访问该服务时,我收到错误消息“此服务的安全设置需要'匿名'身份验证,但未为承载此服务的IIS应用程序启用。”

这是我的服务的web.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="false" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

      <bindings>
        <wsHttpBinding>
          <binding name="basicAuthBinding">
            <security mode="Transport">
              <transport clientCredentialType="Basic" />
            </security>
          </binding>
        </wsHttpBinding>
      </bindings>

      <services>
        <service name="TestService">
          <endpoint address="http://localhost:7000/BA.svc" binding="wsHttpBinding" bindingConfiguration="basicAuthBinding" name="BasicEndpoint" />
        </service>
      </services>
    </system.serviceModel>
</configuration>

为什么这不起作用?

1 个答案:

答案 0 :(得分:0)

根据How can I use WCF with only basichttpbinding, SSL and Basic Authentication in IIS?中的一些建议,您可以用basicHttpBinding替换wsHttpBinding,设置<serviceMetadata httpsGetEnabled="true" />并在IIS上启用SSL吗?

或者出于某种原因这不是您想要托管服务的方式吗?