启用基本和Windows身份验证

时间:2013-10-15 13:37:34

标签: c# .net wcf authentication iis-7

我的服务在IIS7上使用Windows身份验证启用。

    <binding name="Soap.HttpsBinding" closeTimeout="00:05:00"
             openTimeout="00:05:00" receiveTimeout="00:05:00" sendTimeout="00:05:00">
      <security mode="Transport">
        <transport clientCredentialType="Windows" proxyCredentialType="None">
          <extendedProtectionPolicy policyEnforcement="WhenSupported" />
        </transport>
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
    </binding>

我的客户使用相同的绑定详细信息成功连接到它。

我最近要求添加基本身份验证以支持某些遗留系统。我认为我知道的一切都说我们可以并排运行。

我启用了基本身份验证,旧系统可以连接。但是,我们现有的所有WCF客户端现在都抛出以下异常:

  

MessageSecurityException:HTTP请求未经授权,客户端身份验证方案为“Negotiate”。从服务器收到的身份验证标头是'Basic realm =“mydomain.local”,Negotiate,NTLM'。

  1. 为什么Basic在模块列表中位于其他位置之下时首先列出?
  2. 为什么客户没有失败基本并转向谈判? (当然它们不一定相同)
  3. 如何在同一个WCF服务上同时支持Basic和Windows身份验证?
  4. 此致 罗布。

1 个答案:

答案 0 :(得分:1)

好的,事实证明这是我遇到的更具误导性的Microsoft错误消息之一。

正在初始请求中创建401身份验证错误,而不会在事件查看器中记录任何异常。

答案似乎是使用system.webServer - &gt; httpErrors

由于我想在URL中使用波浪号(〜),我将配置设置为以下内容:

<httpErrors>
  <clear />
  <error statusCode="401" responseMode="ExecuteURL" path="~/error.xml" />
</httpErrors>

无论是使用代字号还是ExecuteURL,我最终发现使用以下作品:

<httpErrors>
  <clear />
  <error statusCode="401" responseMode="File" path="/error.xml" />
</httpErrors>